PostgreSQL-də müvəqqəti cədvəllər — bunlar məlumatların müvəqqəti saxlanması üçün yaradılan və sessiya və ya tranzaksiya bitdikdən sonra avtomatik silinən (ayarlarından asılı olaraq) cədvəllərdir. Onlar xüsusilə mürəkkəb əməliyyatları sadələşdirmək və sorğuların icrasını sürətləndirmək üçün faydalıdır.
Təsəvvür elə ki, sən üç ulduzlu yeməklər hazırlayan restoranda aşpazsan. Axı sən bir salatın inqrediyentləri üçün mətbəxdə ayrıca masa saxlamazsan, düzdür? Bax, müvəqqəti cədvəllər də elə müvəqqəti iş səthi rolunu oynayır: işlədin, istifadə etdin, yığışdırdın.
Üstünlüklər:
- Məlumatların izolyasiyası: müvəqqəti cədvəl yalnız cari sessiya və ya tranzaksiya daxilində əlçatandır. Səndən başqa heç kim onun tərkibinə qarışa bilməz.
- Effektivlik: onlar aralıq nəticələri saxlamağa imkan verir ki, mürəkkəb sorğuları təkrar-təkrar işlətməyəsən.
- Təmizlik: iş bitəndən sonra müvəqqəti cədvəllər avtomatik silinir.
Müvəqqəti cədvəllərin yaradılmasının sintaksisi
PostgreSQL müvəqqəti cədvəlləri yaratmaq üçün CREATE TEMP TABLE komandası ilə sadə və rahat yol təqdim edir.
Ümumi sintaksis:
CREATE TEMP TABLE table_name (
column_name1 data_type constraints,
column_name2 data_type constraints,
...
);
TEMPvə yaTEMPORARY— cədvəlin müvəqqəti olduğunu göstərən açar sözdür.table_name— cədvəlin adı. İstənilən ad seçə bilərsən, amma məntiqli adlar seçmək daha yaxşıdır.column_name— sütunun adı.data_type— sütunun məlumat tipi (INTEGER,TEXT,DATEvə s.).constraints— məhdudiyyətlər, məsələn,NOT NULL,UNIQUEvə s.
Sadə müvəqqəti cədvəlin yaradılması nümunəsi:
CREATE TEMP TABLE temp_sales (
id SERIAL PRIMARY KEY,
product_name TEXT NOT NULL,
sale_date DATE NOT NULL,
amount NUMERIC(10, 2) NOT NULL
);
- Burada satış məlumatlarını saxlamaq üçün müvəqqəti cədvəl yaradılır.
idsahəsi hər sətr üçün avtomatik identifikator yaradır.amountsahəsi onluq dəqiqliklə dəyəri saxlayır (məsələn,1234.56).
Müvəqqəti cədvəllərin istifadə nümunələri
Nümunə 1: analiz üçün aralıq məlumatların saxlanması
Təsəvvür elə ki, bizdə bütün sifarişlərin saxlandığı orders cədvəli var. Məhsul kateqoriyaları üzrə ümumi satış məbləğini tapmaq lazımdır. Mürəkkəb sorğu işlətmək əvəzinə, məlumatları müvəqqəti cədvəldə saxlamaq olar.
Müvəqqəti cədvəl yaradaq:
CREATE TEMP TABLE temp_category_sales (
category TEXT,
total_sales NUMERIC(10, 2)
);
Müvəqqəti cədvəli dolduraq:
INSERT INTO temp_category_sales
SELECT category, SUM(amount)
FROM orders
GROUP BY category;
İndi müvəqqəti cədvəldən istifadə edib, məsələn, top-3 kateqoriyanı çıxara bilərik:
SELECT *
FROM temp_category_sales
ORDER BY total_sales DESC
LIMIT 3;
Nümunə 2: fərqli cədvəllərdən məlumatların birləşdirilməsi
Tutaq ki, bizdə iki cədvəl var: students (tələbələr haqqında məlumat) və enrollments (qeydiyyat qeydləri). Onların qeydiyyatlarını bir yerdə toplamaq lazımdır.
Müvəqqəti cədvəl yaradaq:
CREATE TEMP TABLE temp_student_enrollments (
student_id INTEGER,
student_name TEXT,
course_id INTEGER,
enrollment_date DATE
);
Məlumatların birləşdirilməsi:
INSERT INTO temp_student_enrollments
SELECT s.id, s.name, e.course_id, e.enrollment_date
FROM students s
JOIN enrollments e ON s.id = e.student_id;
İndi bu cədvəli asanlıqla analiz edə bilərik, məsələn, hər tələbə üçün qeydiyyat sayını hesablayaq:
SELECT student_name, COUNT(course_id) AS enrollment_count
FROM temp_student_enrollments
GROUP BY student_name
ORDER BY enrollment_count DESC;
Tranzaksiyalarda müvəqqəti cədvəllər
Əlavə olaraq, müvəqqəti cədvəlləri tranzaksiya çərçivəsində məhdudlaşdırmaq olar, bunun üçün ON COMMIT açar sözündən istifadə edilir.
ON COMMIT variantları:
ON COMMIT DELETE ROWS: tranzaksiya bitəndən sonra müvəqqəti cədvəlin təmizlənməsi.ON COMMIT PRESERVE ROWS: məlumatların saxlanması.ON COMMIT DROP: tranzaksiya bitəndən sonra cədvəlin silinməsi.
Nümunə:
CREATE TEMP TABLE temp_analysis (
category TEXT,
total_sales NUMERIC(10, 2)
) ON COMMIT DROP;
Bu halda, müvəqqəti cədvəl tranzaksiya bitən kimi yox olacaq.
Praktiki əhəmiyyəti və istifadə case-ləri
Müvəqqəti cədvəllər real layihələr üçün idealdır. Gəlin bir neçə situasiyaya baxaq:
Case-lər:
- Biznesdə mürəkkəb hesabatlar: sən mürəkkəb, çoxsaylı hesablamalar aparıb aralıq nəticələri saxlaya bilərsən.
- ETL üçün məlumatların hazırlanması: müvəqqəti cədvəllər tez-tez məlumatların çıxarılması, çevrilməsi və yüklənməsi (ETL) prosesində istifadə olunur.
- Sorğuların hazırlanması və test edilməsi: sorğuları debug edəndə məlumatları izolyasiya etmək üçün müvəqqəti cədvəllərdən istifadə et.
Məsələn, əgər sən satış hesabatı hazırlayırsansa, müvəqqəti cədvəllər aralıq nəticələri — ümumi gəlir və ya regionlar üzrə trendlər kimi — saxlamağa kömək edəcək, əsas verilənlər bazasının strukturuna təsir etmədən.
Xüsusiyyətlər və tipik səhvlər
Müvəqqəti cədvəllərlə işləmək — demək olar ki, həmişə bayramdır, amma bir neçə nüansı nəzərə almaq lazımdır:
- Giriş məhdudiyyəti: müvəqqəti cədvəllər yalnız cari sessiya və ya tranzaksiya daxilində görünür. Sessiyanı bitirsən, cədvəllər yox olacaq.
- Unikal adlarla bağlı səhvlər: bir sessiyada artıq başqa cədvəldə istifadə olunan adla müvəqqəti cədvəl yarada bilməzsən.
- Məlumat itkisi: müvəqqəti cədvəli silməzdən əvvəl lazım olan məlumatları çıxardığına əmin ol.
- Performans: əgər müvəqqəti cədvəldə çoxlu sətir varsa, bu RAM istifadəsinə təsir edə bilər.
GO TO FULL VERSION