Forwarded from CodeCrafters (Mojtaba)
محاصره در تراکنش ها
یه چیزی هست که شاید خیلیهاتون متوجهش نشده باشید. اونم اینه که توی PostgreSQL، حتی سادهترین دستورات هم توی یه تراکنش انجام میشن! عجیبه نه؟
شاید بگید "خب چطور میشه فهمید؟ ما که تراکنشی شروع نکردیم!". ولی یه خورده صبر کنید... میتونیم یه دستوری اجرا کنیم که برامون نشون بده الان داخل کدوم تراکنشیم. بفرما:
حالا چی شد؟ یه عددی بهتون نشون داد، درسته؟ ولی ما که چیزی شروع نکردیم! چون اون عددی که دیدید، شناسهی تراکنشیه که همین الان توش هستید.
حالا بازم همون دستور رو اجرا کنید. چی میبینید؟ اون عدد، یه واحد زیادتر شده! آره، این یعنی حتی همین یه دستور کوچیک، یه تراکنش جدید برا خودش باز کرده.
شاید بپرسید چرا انقدر ریزهکاری؟ خب، اینجوری PostgreSQL، خیالش راحته که هر تغییری که انجام میشه، یا کاملاً انجام میشه، یا اصلاً انجام نمیشه. اگه توی یه دستور مشکلی پیش بیاد، کل تراکنش باطل میشه و هیچ تغییری اعمال نمیشه.
پس یادتون باشه، توی PostgreSQL، همیشه تو یه تراکنش هستید، چه بخواهید، چه نخواهید! این یه جور مراقبت اضافهست که دادههاتون رو سالم نگه میداره.
#postgresql
@Code_Crafters
یه چیزی هست که شاید خیلیهاتون متوجهش نشده باشید. اونم اینه که توی PostgreSQL، حتی سادهترین دستورات هم توی یه تراکنش انجام میشن! عجیبه نه؟
شاید بگید "خب چطور میشه فهمید؟ ما که تراکنشی شروع نکردیم!". ولی یه خورده صبر کنید... میتونیم یه دستوری اجرا کنیم که برامون نشون بده الان داخل کدوم تراکنشیم. بفرما:
SELECT txid_current();
حالا چی شد؟ یه عددی بهتون نشون داد، درسته؟ ولی ما که چیزی شروع نکردیم! چون اون عددی که دیدید، شناسهی تراکنشیه که همین الان توش هستید.
حالا بازم همون دستور رو اجرا کنید. چی میبینید؟ اون عدد، یه واحد زیادتر شده! آره، این یعنی حتی همین یه دستور کوچیک، یه تراکنش جدید برا خودش باز کرده.
شاید بپرسید چرا انقدر ریزهکاری؟ خب، اینجوری PostgreSQL، خیالش راحته که هر تغییری که انجام میشه، یا کاملاً انجام میشه، یا اصلاً انجام نمیشه. اگه توی یه دستور مشکلی پیش بیاد، کل تراکنش باطل میشه و هیچ تغییری اعمال نمیشه.
پس یادتون باشه، توی PostgreSQL، همیشه تو یه تراکنش هستید، چه بخواهید، چه نخواهید! این یه جور مراقبت اضافهست که دادههاتون رو سالم نگه میداره.
#postgresql
@Code_Crafters
👍14🔥1
Forwarded from CodeCrafters (Mojtaba)
باینری ها در PostgreSQL: ذخیره سازی اطلاعات خام
تصور کنید میخواهید عکسی از گربهتان را در PostgreSQL ذخیره کنید. چطور میتوانید این کار را انجام دهید؟
پایگاه داده PostgreSQL نوع دادهای به نام
تفاوت باینری و رشتههای کاراکتری:
* رشتههای باینری مانند "بایتهای خام" هستند و میتوانند هر نوع دادهای را ذخیره کنند، از جمله صفر و کاراکترهای غیرقابل چاپ.
* رشتههای کاراکتری برای ذخیره متن مناسب هستند و محدودیتهایی در مورد کاراکترهای مجاز دارند.
فرمتهای ذخیره سازی:
هگزادسیمال: هر بایت به عنوان دو رقم شانزدهگانی نمایش داده میشود (مثلاً "00" برای بایت صفر). این فرمت خوانایی بیشتری دارد.
نوع Escape: برخی از بایتها با کاراکترهای خاص علامتگذاری میشوند. این فرمت قدیمیتر است و کاربرد کمتری دارد.
کاربردها:
۱.ذخیره تصاویر، فایلهای صوتی و ویدئوها
۲.ذخیره دادههای باینری مانند کدهای برنامه
۳.ذخیره اطلاعات رمزنگاری شده
مثال:
فرض کنید میخواهید تصویر گربهتان را با نام
نکات:
پایگاه داده PostgreSQL از نوع داده
میتوانید از توابع و عملگرهای مختلفی برای کار با دادههای
نتیجه:
نوع داده
#PostgreSQL
@Code_Crafters
تصور کنید میخواهید عکسی از گربهتان را در PostgreSQL ذخیره کنید. چطور میتوانید این کار را انجام دهید؟
پایگاه داده PostgreSQL نوع دادهای به نام
bytea
را ارائه میدهد که برای ذخیره اطلاعات باینری مانند تصاویر، فایلهای صوتی و ویدئوها ایدهآل است.تفاوت باینری و رشتههای کاراکتری:
* رشتههای باینری مانند "بایتهای خام" هستند و میتوانند هر نوع دادهای را ذخیره کنند، از جمله صفر و کاراکترهای غیرقابل چاپ.
* رشتههای کاراکتری برای ذخیره متن مناسب هستند و محدودیتهایی در مورد کاراکترهای مجاز دارند.
فرمتهای ذخیره سازی:
هگزادسیمال: هر بایت به عنوان دو رقم شانزدهگانی نمایش داده میشود (مثلاً "00" برای بایت صفر). این فرمت خوانایی بیشتری دارد.
نوع Escape: برخی از بایتها با کاراکترهای خاص علامتگذاری میشوند. این فرمت قدیمیتر است و کاربرد کمتری دارد.
کاربردها:
۱.ذخیره تصاویر، فایلهای صوتی و ویدئوها
۲.ذخیره دادههای باینری مانند کدهای برنامه
۳.ذخیره اطلاعات رمزنگاری شده
مثال:
فرض کنید میخواهید تصویر گربهتان را با نام
cat.jpg
در پایگاه داده ذخیره کنید:INSERT INTO photos (name, data)
VALUES ('cat.jpg', BYTEA('\xFF\xD8\xFF\xE0'));
نکات:
پایگاه داده PostgreSQL از نوع داده
BLOB
(Binary Large Object) نیز برای ذخیره دادههای باینری پشتیبانی میکند. فرمت ورودی BLOB
با bytea
متفاوت است، اما توابع و عملگرهای مشابهی دارند.میتوانید از توابع و عملگرهای مختلفی برای کار با دادههای
bytea
استفاده کنید، مانند LENGTH()
, SUBSTRING()
و COMPARE()
.نتیجه:
نوع داده
bytea
یک ابزار قدرتمند برای ذخیره و مدیریت دادههای باینری در PostgreSQL است. با استفاده از این نوع داده، میتوانید انواع مختلف اطلاعات را به طور کارآمد و ایمن ذخیره کنید.#PostgreSQL
@Code_Crafters
👍5❤1