Data ilə işləyəndə demək olar ki, həmişə nəsə zamanla bağlı bir şey ortaya çıxır. Məsələn, reys cədvəlləri, sifarişin deadline-ı və ya istifadəçinin saytda qeydiyyatdan keçdiyi tarix. Bunların hamısı — zamandır. Və bununla rahat işləmək üçün düzgün alətlər lazımdır. PostgreSQL-də tarix və zaman saxlamaq və işləmək üçün xüsusi məlumat tipləri var və bunlar bu işin öhdəsindən əla gəlir.
Əlbəttə, tarixi adi string kimi, məsələn, "2023-10-12" kimi saxlamaq olar, amma bu, həll yox, tələdir. String-lər tarixləri müqayisə edə bilmir, "üç gün əlavə et" nə deməkdir bilmir və ümumiyyətlə timezone-lardan heç xəbəri yoxdur. Amma zaman tipləri — bunların hamısını bilir və daha artığını da. Onlarla işləmək həm rahat, həm də etibarlı və sürətlidir.
DATE tipi
DATE tipi yalnız təqvim tarixini saxlamaq üçündür, yəni konkret saatı göstərmir. Bu, məsələn, doğum tarixi, ilin başlanğıcı və s. kimi tarixlərlə ayrıca işləmək lazım olanda çox rahatdır.
İstifadə nümunələri:
-- `DATE` tipi ilə cədvəl yaratmaq nümunəsi
CREATE TABLE events (
event_name TEXT,
event_date DATE
);
-- Data əlavə etmək
INSERT INTO events (event_name, event_date)
VALUES ('PostgreSQL konfransı', '2023-12-01'),
('Ad günü', '2023-10-12');
-- Seçim sorğusu
SELECT * FROM events;
Nəticə:
| event_name | event_date |
|---|---|
| PostgreSQL konfransı | 2023-12-01 |
| Ad günü | 2023-10-12 |
TIME tipi
TIME tipi YALNIZ saatı saxlayır, yəni saat, dəqiqə və saniyə. Bu, məsələn, avtobus cədvəlləri və ya mağazaların iş saatları kimi məsələlər üçün idealdır.
Nümunələr:
-- `TIME` ilə cədvəl yaratmaq nümunəsi
CREATE TABLE schedules (
schedule_name TEXT,
start_time TIME,
end_time TIME
);
-- Data əlavə etmək
INSERT INTO schedules (schedule_name, start_time, end_time)
VALUES ('İş vaxtı', '09:00:00', '18:00:00'),
('Nahar fasiləsi', '13:00:00', '14:00:00');
-- Seçim sorğusu
SELECT schedule_name, start_time, end_time FROM schedules;
Nəticə:
| schedule_name | start_time | end_time |
|---|---|---|
| İş vaxtı | 09:00:00 | 18:00:00 |
| Nahar fasiləsi | 13:00:00 | 14:00:00 |
TIMESTAMP tipi
TIMESTAMP tipi həm təqvim tarixini, həm də saatı bir dəyərdə birləşdirir. Amma bu tip timezone-u nəzərə almır. Əgər datanı fərqli timezone-da olan istifadəçilər işlədəcəksə, bu qarışıqlıq yarada bilər.
Nümunələr:
-- `TIMESTAMP` ilə cədvəl yaratmaq nümunəsi
CREATE TABLE documents (
document_id SERIAL PRIMARY KEY,
created_at TIMESTAMP
);
-- Data əlavə etmək
INSERT INTO documents (created_at)
VALUES ('2023-10-12 15:30:00'),
('2023-12-01 08:45:15');
-- Seçim sorğusu
SELECT document_id, created_at FROM documents;
Nəticə:
| document_id | created_at |
|---|---|
| 1 | 2023-10-12 15:30:00 |
| 2 | 2023-12-01 08:45:15 |
TIMESTAMPTZ tipi
TIMESTAMPTZ tipi (TZ — "timezone" deməkdir) TIMESTAMP-a bənzəyir, amma əlavə olaraq timezone məlumatını da saxlayır. Bu, beynəlxalq istifadəçilərlə işləyən tətbiqlər üçün əvəzolunmazdır.
Nümunələr:
-- `TIMESTAMPTZ` ilə cədvəl yaratmaq nümunəsi
CREATE TABLE meetings (
meeting_id SERIAL PRIMARY KEY,
meeting_time TIMESTAMPTZ
);
-- Data əlavə etmək (PostgreSQL cari timezone-u saxlayır)
INSERT INTO meetings (meeting_time)
VALUES ('2023-10-12 15:30:00+03'),
('2023-12-01 08:45:15-05');
-- Seçim sorğusu
SELECT meeting_id, meeting_time FROM meetings;
Nəticə:
| meeting_id | meeting_time |
|---|---|
| 1 | 2023-10-12 15:30:00+03:00 |
| 2 | 2023-12-01 08:45:15-05:00 |
Nəzərə al ki, PostgreSQL zamanı avtomatik olaraq serverin timezone-una çevirir.
Xüsusi məlumat tiplərindən istifadə etməyin üstünlükləri
Data düzgünlüyü. DATE və TIMESTAMP kimi tiplər səhv data daxil edilməsinin qarşısını alır. Məsələn, "2023-02-30" kimi mövcud olmayan tarixi yazmaq mümkün deyil.
Rahatlıq. Tarixləri müqayisə edə bilərsən, bir-birindən çıxmaq olar, cari tarixi götürmək və hətta dəyərləri yuvarlaqlaşdırmaq mümkündür (bunu sonra danışacağıq).
Performans. Zaman tipləri yaddaşda və indekslərdə string-lərə nisbətən daha az yer tutur, bu da sorğuların daha sürətli işləməsinə səbəb olur.
Nümunə: bütün tiplərlə cədvəl yaratmaq
Gəlin tədbir cədvəlini saxlamaq üçün bir az daha mürəkkəb cədvəl yaradaq. Burada bir neçə tipdən istifadə edəcəyik: DATE, TIME, TIMESTAMP və TIMESTAMPTZ.
CREATE TABLE event_schedule (
event_id SERIAL PRIMARY KEY,
event_name TEXT NOT NULL,
event_date DATE NOT NULL,
start_time TIME NOT NULL,
end_time TIME NOT NULL,
full_start TIMESTAMP NOT NULL,
full_start_with_zone TIMESTAMPTZ NOT NULL
);
-- Data əlavə edirik
INSERT INTO event_schedule (
event_name, event_date, start_time, end_time, full_start, full_start_with_zone
)
VALUES
('Səhər meetupu', '2023-11-10', '10:00:00', '11:30:00', '2023-11-10 10:00:00', '2023-11-10 10:00:00+03'),
('Axşam workshop', '2023-11-11', '18:00:00', '20:00:00', '2023-11-11 18:00:00', '2023-11-11 18:00:00+03');
-- Data yoxlayırıq
SELECT * FROM event_schedule;
Nəticə:
| event_id | event_name | event_date | start_time | end_time | full_start | fullstartwith_zone |
|---|---|---|---|---|---|---|
| 1 | Səhər meetupu | 2023-11-10 | 10:00:00 | 11:30:00 | 2023-11-10 10:00:00 | 2023-11-10 10:00:00+03:00 |
| 2 | Axşam workshop | 2023-11-11 | 18:00:00 | 20:00:00 | 2023-11-11 18:00:00 | 2023-11-11 18:00:00+03:00 |
Bu, real cədvəl idarəetməsi üçün bir nümunədir. Görürsən ki, müxtəlif zaman formatları bir-birini tamamlayır və hər birinin öz yeri var.
Ümid edirəm yadına saldın ki, DATE, TIME, TIMESTAMP və TIMESTAMPTZ tiplərini PostgreSQL-də necə istifadə etmək olar. Növbəti dərslərdə zaman funksiyaları ilə daha dərindən işləyəcəyik və SQL sorğuları ilə zaman datalarını necə çıxarmaq, formatlamaq və idarə etmək lazım olduğunu öyrənəcəyik.
GO TO FULL VERSION