محمدحسین حسن زاده
محمدحسین حسن زاده
خواندن ۲ دقیقه·۲ سال پیش

نحوه ذخیره سازی datetime در postgresql

سلام به همه شمایی که این مقاله رو میخونین !

همونطور که میدونین یکی از تفاوت های postgresql و sql server نحوه ذخیره سازی time هست . توی این مقاله میخوایم ببینیم که تایپ های زمانی postgresql چیا هستن و چه تفاوتی با sql server دارن.





تایپ های زمانی در postgresql

  1. timestamp with time zone: تاریخ و ساعت با ذکر موقعیت زمانی
  2. timestamp without time zone: تاریخ و ساعت بدون ذکر موقعیت زمانی (پیشفرض)
  3. date : صرفا تاریخ (که خب طبیعتا موقعیت زمانی هم نداره)
  4. time with time zone: صرفا ساعت با ذکر موقعیت زمانی
  5. time without time zone: صرفا ساعت بدون ذکر موقعیت زمانی (پیشفرض)
  6. Interval: فاصله زمانی (مثلا ۱۵ دقیقه بعد یا ۱ سال قبل)

تفاوت postgresql و sql server در ذخیره سازی time

sql server:

هر نوع دیتایی از زمان (مثلا time یا datetime) بدون منطقه زمانی (time zone) و به همان صورتی که insert شده باشد ذخیره می شود و هر وقت که بخواهیم دیتا را بخوانیم باید تشخیص دهیم که آن دیتا با چه time zone ای ذخیره شده است که دردسر های خاص خودش را دارد و باید همیشه مراقب یکپارچه بودن دیتا در write و read باشیم (مثلا آن را همیشه UTC در نظر بگیریم).

postgresql:

در postgresql هر تایپی که time در خودش داشته باشد به دو صورت ذخیره می شود

1. time(stamp) without time zone

2. time(stamp) with time zone

در ادامه اونا رو توضیح میدم :

time(stamp) without time zone:

در واقع این مورد مثل sql server رفتار می کند و شما می توانید بدون مشخص کردن موقعیت زمانی دیتا را ذخیره کنید.

time(stamp) with time zone:

اینجاست که به تفاوت بین sql server و postgresql می رسیم. در این مورد دیتابیس رفتار ویژه ای رو خواهد داشت.

در insert کردن دیتا ، درصورتی که دیتا بدون مشخص کردن موقعیت زمانی وارد شده باشد دیتابیس آن را با موقعیت زمانی local سیستم در نظر میگیرد اما درصورتی که به صورت مخصوص موقعیت زمانی را مشخص کنیم دیتابیس دیتای وارد شده رو با همان موقعیت زمانی ذکر شده در نظر میگیرد.

لازم به ذکره که postgres در هر حال دیتای زمانی رو در هسته دیتابیس به صورت UTC ذخیره میکنه.

در خواندن دیتا، دیتابیس در هر صورت دیتا را به timezone سیستم تغییر میدهد و زمان با موقعیت زمانی local را دریافت خواهید کرد.



جمع بندی

دیدیم که تفاوت های postgresql و sql server در داشتن موقعیت زمانی (time zone) هستش و اینکه در postgres برای ذخیره دیتای (timestamp with time zone) میتونید هم با ذکر موقعیت زمانی مد نظر خود و هم بدون ذکر موقعیت زمانی دیتا رو ذخیره کنید که در این صورت موقعیت زمانی local سیستم در نظر گرفته خواهد شد و در هر حال postgres در هسته خودش زمان ها رو به صورت پیشفرض UTC ذخیره میکنه ، در read دیتای زمانی دیدیم که postgres در هر حال دیتا رو به موقعیت زمانی محلی تبدیل میکنه و البته موقعیت زمانی رو هم براتون ذکر میکنه.

امیدوارم این مقاله براتون مفید بوده باشه .




sql serverpostgresqlsqlpostgresبرنامه نویسی
برنامه نویس بک اند عاشق تکنولوژی و به طور خلاصه گیک
شاید از این پست‌ها خوشتان بیاید