Skip to content

Latest commit

 

History

History
167 lines (117 loc) · 5.16 KB

Temporary table.md

File metadata and controls

167 lines (117 loc) · 5.16 KB

Temporary Table

Ushbu qo'llanmada siz PostgreSQL vaqtinchalik jadvali va uni qanday samarali boshqarish haqida bilib olasiz.

image

Vaqtinchalik jadval, nomidan ko'rinib turibdiki, ma'lumotlar bazasi sessiyasi davomida mavjud bo'lgan qisqa muddatli jadvaldir. PostgreSQL seans yoki tranzaksiya oxirida vaqtinchalik jadvallarni avtomatik ravishda tushiradi.

Vaqtinchalik jadval yaratish uchun siz CREATE TEMPORARY TABLE iborasidan foydalanasiz:

CREATE TEMPORARY TABLE temp_table_name(
   column_list
);

Ushbu sintaksisda:

  • Birinchidan, CREATE TEMPORARY TABLE kalit so'zlaridan keyin vaqtinchalik jadval nomini belgilang.

  • Ikkinchidan, CREATE TABLE bayonotidagi bilan bir xil bo'lgan ustunlar ro'yxatini belgilang.

TEMP va TEMPORARY kalit so'zlari ekvivalentdir, shuning uchun ularni bir-birining o'rnida ishlatishingiz mumkin:

CREATE TEMP TABLE temp_table(
   ...
);

Vaqtinchalik jadval faqat uni yaratgan seansga ko'rinadi. Boshqacha qilib aytganda, u boshqa seanslarga ko'rinmaydi.

Keling, bir misolni ko'rib chiqaylik.

Birinchidan, psql dasturi yordamida PostgreSQL ma'lumotlar bazasi serveriga kiring va test nomli yangi ma'lumotlar bazasini yarating:

postgres=# CREATE DATABASE test;
CREATE DATABASE
postgres-# \c test;
You are now connected to database "test" as user "postgres".

Keyin mytemp nomli vaqtinchalik jadvalni quyidagicha yarating:

test=# CREATE TEMP TABLE mytemp(c INT);
CREATE TABLE
test=# SELECT * FROM mytemp;
 c
---
(0 rows)

Keyin test ma'lumotlar bazasiga ulanadigan boshqa seansni ishga tushiring va mytemp jadvalidagi ma'lumotlarni so'rang:

test=# SELECT * FROM mytemp;
ERROR:  relation "mytemp" does not exist
LINE 1: SELECT * FROM mytemp;

Natijadan aniq ko'rinib turibdiki, ikkinchi seans mytemp jadvalini ko'ra olmadi. Unga faqat birinchi seans kirishi mumkin.

Shundan so'ng, barcha seanslarni to'xtating:

test=# \q

Nihoyat, ma'lumotlar bazasi serveriga qayta kiring va mytemp jadvalidan ma'lumotlarni so'rang:

test=# SELECT * FROM mytemp;
ERROR:  relation "mytemp" does not exist
LINE 1: SELECT * FROM mytemp;
^

mytemp jadvali mavjud emas, chunki seans tugagandan so'ng u avtomatik ravishda o'chirilgan, shuning uchun PostgreSQL xatoga yo'l qo'ydi.

PostgreSQL vaqtinchalik jadval nomi

Vaqtinchalik jadval doimiy jadval bilan bir xil nomga ega bo'lishi mumkin, garchi u tavsiya etilmasa ham.

Doimiy jadval bilan bir xil nomga ega bo'lgan vaqtinchalik jadvalni yaratganingizda, vaqtinchalik jadval o'chirilmaguncha doimiy jadvalga kira olmaysiz. Quyidagi misolni ko'rib chiqing:

First, create a table named customers:

CREATE TABLE customers(
   id SERIAL PRIMARY KEY, 
   name VARCHAR NOT NULL
);

Ikkinchidan, xuddi shu nom bilan vaqtinchalik jadval yarating: customers

CREATE TEMP TABLE customers(
    customer_id INT
);

Endi, customers jadvalidan maʼlumotlarni soʻrang:

SELECT * FROM customers;
 customer_id
-------------
(0 rows)

Bu safar PostgreSQL doimiy customers o'rniga vaqtinchalik jadvalga kirdi.

E'tibor bering, PostgreSQL maxsus sxemada vaqtinchalik jadvallarni yaratadi, shuning uchun siz CREATE TEMP TABLE bayonotida sxemani ko'rsata olmaysiz.

Agar siz test maʼlumotlar bazasida jadvallarni roʻyxatga kiritsangiz, doimiy jadvalni emas, faqat vaqtinchalik customers jadvalini koʻrasiz:

                 List of relations
  Schema   |       Name       |   Type   |  Owner
-----------+------------------+----------+----------
 pg_temp_3 | customers        | table    | postgres
 public    | customers_id_seq | sequence | postgres
(2 rows)

Chiqish customers vaqtinchalik jadvalining pg_temp_3. sxemasini ko'rsatadi.

Bunday holda, doimiy jadvalga kirish uchun siz to'liq malakali nomdan foydalanishingiz kerak, ya'ni sxema bilan prefiks. Masalan:

SELECT * FROM public.customers;

PostgreSQL vaqtinchalik jadvalini olib tashlash

Vaqtinchalik jadvalni tushirish uchun siz DROP TABLE iborasidan foydalanasiz. Quyidagi bayonot vaqtinchalik jadvalni tashlash uchun DROP TABLE iborasidan foydalanadi:

DROP TABLE temp_table_name;

CREATE TABLE iborasidan farqli o'laroq, DROP TABLE operatorida vaqtinchalik jadvallar uchun maxsus yaratilgan TEMP yoki TEMPORARY kalit so'zlari mavjud emas.

Misol uchun, quyidagi bayonot biz yuqoridagi misolda yaratgan vaqtinchalik customers jadvalini olib tashlaydi:

DROP TABLE customers;

Jadvallarni test maʼlumotlar bazasida yana roʻyxatga kiritsangiz, doimiy jadval customers quyidagicha koʻrinadi:

test=# \d
                List of relations
 Schema |       Name       |   Type   |  Owner
--------+------------------+----------+----------
 public | customers        | table    | postgres
 public | customers_id_seq | sequence | postgres
(2 rows)

Ushbu qo'llanmada siz vaqtinchalik jadval va uni CREATE TEMP TABLE va DROP TABLE iboralari yordamida qanday yaratish va tushirish haqida bilib oldingiz.

© postgresqltutorial.com