Timestamp
Ushbu qo'llanmada siz PostgreSQL timestamp
ma'lumotlar turlari, shu jumladan timestamp
va timestamptz
haqida bilib olasiz. Shuningdek, timestamptz
ma'lumotlarini samarali boshqarish uchun ba'zi qulay funktsiyalardan qanday foydalanishni o'rganasiz.
PostgreSQL sizga vaqt belgilari bilan ishlash uchun ikkita vaqtinchalik ma'lumotlar turini taqdim etadi:
timestamp
: vaqt mintaqasi bo'lmagan vaqt tamg'asi. *timestamptz
: vaqt mintaqasi bilan vaqt tamg'asi.
timestamp
maʼlumotlar turi sana va vaqtni saqlash imkonini beradi. Biroq, unda hech qanday vaqt mintaqasi ma'lumotlari yo'q. Bu shuni anglatadiki, ma'lumotlar bazasi serveringizning vaqt mintaqasini o'zgartirganingizda, ma'lumotlar bazasida saqlangan vaqt tamg'asi qiymati avtomatik ravishda o'zgarmaydi.
timestamptz
maʼlumotlar turi — vaqt mintaqasi boʻlgan vaqt tamgʻasi. timestamptz
ma'lumotlar turi - bu vaqt mintaqasidan xabardor sana va vaqt ma'lumotlari turi.
Ichki sifatida PostgreSQL timestamptz
UTC qiymatida saqlaydi.
timestamptz
ustuniga qiymat kiritganingizda, PostgreSQLtimestamptz
qiymatini UTC qiymatiga o'zgartiradi va UTC qiymatini jadvalda saqlaydi.timestamptz
ustunidan ma'lumotlarni olganingizda, PostgreSQL UTC qiymatini ma'lumotlar bazasi serveri, foydalanuvchi yoki joriy ma'lumotlar bazasi ulanishi tomonidan belgilangan vaqt mintaqasining vaqt qiymatiga qaytaradi.
Eʼtibor bering, timestamp
ham, timestamptz
ham quyidagi soʻrovda koʻrsatilganidek, vaqt tamgʻasi qiymatlarini saqlash uchun 8 baytdan foydalanadi:
Chiqish:
Shuni ta'kidlash kerakki, PostgreSQL timestamptz
qiymatlarini UTC qiymatlaridan foydalangan holda ma'lumotlar bazasida saqlaydi. timestamptz
qiymati bilan vaqt mintaqasi ma'lumotlarini saqlamaydi.
PostgreSQL timestamp
misoli
timestamp
misoliKeling, PostgreSQL tomonidan qanday ishlashini yaxshiroq tushunish uchun timestamp
va timestamptz
dan foydalanish misolini ko'rib chiqaylik.
Birinchidan, timestamp
ustunlarining ikkala timestamptz
dan iborat jadval yarating.
Keyin maʼlumotlar bazasi serverining vaqt mintaqasini America/Los_Angeles
ga oʻrnating.
Aytgancha, siz joriy vaqt mintaqasini SHOW TIMEZONE
buyrug'i yordamida ko'rishingiz mumkin:
Keyin timstamp_demo
jadvaliga yangi qator kiriting:
Shundan so'ng, timestamp
va timestamptz
ustunlaridan ma'lumotlarni so'rang.
So'rov kiritilgan qiymatlar bilan bir xil vaqt tamg'asi qiymatlarini qaytaradi.
Nihoyat, joriy seansning vaqt mintaqasini America/New_York
ga o'zgartiring va ma'lumotlarni qayta so'rang.
timestamp
ustunidagi qiymat o'zgarmaydi, timestamptz
ustunidagi qiymat esa "Amerika/Nyu_York"
ning yangi vaqt mintaqasiga o'rnatiladi.
Umuman olganda, timestamptz
ma'lumotlarini saqlash uchun vaqt tamg'asi ma'lumotlar turidan foydalanish yaxshi amaliyotdir.
PostgreSQL timestamp funksiyalari
timestamp
ma'lumotlarini samarali boshqarish uchun PostgreSQL quyidagi kabi ba'zi qulay funktsiyalarni taqdim etadi:
Joriy vaqtni olish
Joriy vaqt tamg'asini olish uchun NOW()
funksiyasidan quyidagi tarzda foydalanasiz:
Chiqish:
Shu bilan bir qatorda, siz CURRENT_TIMESTAMP
funksiyasidan foydalanishingiz mumkin:
Chiqish:
Joriy vaqtni sanasiz olish uchun siz CURRENT_TIME
funksiyasidan foydalanasiz:
Chiqish:
Esda tutingki, CURRENT_TIMESTAMP
ham, CURRENT_TIME
ham joriy vaqtni vaqt mintaqasi bilan qaytaradi.
Kunning vaqtini string formatida olish uchun siz timeofday()
funksiyasidan foydalanasiz.
Vaqt mintaqalari oʻrtasida konvertatsiya qilish
Vaqt tamg'asini boshqa vaqt mintaqasiga aylantirish uchun siz timezone(zone, timestamp)
funksiyasidan foydalanasiz.
Joriy vaqt mintaqasi Amerika/Nyu_York
.
2016-06-01 00:00
ni Amerika/Los_Anjeles
vaqt mintaqasiga aylantirish uchun siz timezone()
funksiyasidan quyidagi tarzda foydalanasiz:
E'tibor bering, biz vaqt tamg'asini satr sifatida timezone()
funksiyasiga o'tkazamiz, PostgreSQL uni bilvosita timestamptz
ga o'tkazadi. timestamp
qiymatini timestamptz
ma'lumotlar turiga quyidagi bayonot sifatida aniq ko'rsatish yaxshiroqdir:
Chiqish:
timestamp
ustunlari uchun standart qiymatlardan foydalanish
timestamp
ustunlari uchun standart qiymatlardan foydalanishBirinchidan, department
deb nomlangan yangi jadval yarating:
created_at
va updated_at
ustunlari uchun standart qiymatlar CURRENT_TIMESTAMP
funksiyasi tomonidan taqdim etilgan joriy vaqt tamg'asidir.
Ikkinchidan, created_at
va updated_at
ustunlari uchun qiymatlarni ko'rsatmasdan, department
jadvaliga yangi qator qo'shing:
Chiqarish shuni ko'rsatadiki, PostgreSQL created_at
va created_at
ustunlariga kiritish uchun joriy vaqtdan foydalanadi.
Bo'lim
jadvalidagi qatorni yangilaganingizda, updated_at
ustuni joriy vaqtga avtomatik ravishda yangilanmaydi.
updated_at
ustunidagi qiymatni satr yangilangan vaqtga yangilash uchun siz updated_at
ustunidagi qiymatni o'zgartirish uchun BEFORE UPDATE
triggerini yaratishingiz mumkin.
Esda tutingki, MySQL
TIMESTAMP
ustunini joriy vaqt tamg'asiga avtomatik yangilash uchunON UPDATE CURRENT_TIMESTAMP
ni taklif qiladi. PostgreSQL hozirda bu xususiyatni qo'llab-quvvatlamaydi.
Uchinchidan, department
jadvalining updated_at
ustunini yangilash uchun BEFORE UPDATE
triggerini yarating:
To'rtinchidan, updated_at
ustuniga qiymat ko'rsatmasdan IT bo'limi nomini ITD
ga yangilang:
Chiqish:
Chiqish updated_at
ustunidagi qiymat trigger tomonidan avtomatik ravishda yangilanganligini bildiradi.
Xulosa
Vaqt tamg'asi ma'lumotlarini saqlash uchun
timestamp
vatimestamptz
dan foydalaningPostgreSQL ma'lumotlar bazasida
timestamptz
qiymatlarini UTC qiymatlari sifatida saqlaydi.
Last updated