Anda mungkin ingin CREATE TABLE AS
- juga berfungsi untuk TEMPORARY
(TEMP
) tabel:
CREATE TEMP TABLE temp1 AS
SELECT dataid
, register_type
, timestamp_localtime
, read_value_avg
FROM rawdata.egauge
WHERE register_type LIKE '%gen%'
ORDER BY dataid, timestamp_localtime;
Ini membuat tabel sementara dan menyalin data ke dalamnya. Snapshot statis dari data, ingatlah. Ini seperti tabel biasa, tetapi berada di RAM jika temp_buffers
diatur cukup tinggi. Itu hanya terlihat dalam sesi saat ini dan mati di ujungnya. Saat dibuat dengan ON COMMIT DROP
itu mati di akhir transaksi .
Tabel sementara didahulukan di jalur penelusuran skema default , menyembunyikan tabel lain yang terlihat dengan nama yang sama kecuali memenuhi syarat skema:
- Bagaimana search_path mempengaruhi resolusi pengenal dan "skema saat ini"
Jika Anda ingin dinamis , Anda akan mencari CREATE VIEW
- cerita yang sama sekali berbeda.
Standar SQL juga mendefinisikan, dan Postgres juga mendukung: . Namun penggunaannya tidak disarankan:SELECT INTO
Cara terbaik adalah menggunakan
CREATE TABLE AS
untuk tujuan ini dalam kode baru.
Benar-benar tidak perlu varian sintaks kedua, dan SELECT INTO
digunakan untuk penugasan di plpgsql
, di mana sintaks SQL tidak memungkinkan.
Terkait:
- Gabungkan dua tabel menjadi tabel baru sehingga baris terpilih dari tabel lainnya diabaikan
- ERROR:parameter input setelah satu dengan nilai default juga harus memiliki default di Postgres
CREATE TABLE LIKE (...)
hanya menyalin struktur dari tabel lain dan tidak ada data:
LIKE
klausa menentukan tabel tempat tabel baru secara otomatis menyalin semua nama kolom, tipe datanya, dan batasan not-nullnya.
Jika Anda memerlukan tabel "sementara" hanya untuk satu kueri (lalu membuangnya), "tabel turunan" dalam CTE atau subquery hadir dengan overhead yang jauh lebih sedikit:
- Ubah rencana eksekusi kueri di postgresql secara manual?
- Gabungkan dua kueri SELECT di PostgreSQL
- Gunakan kembali nilai pilihan yang dihitung
- Beberapa CTE dalam satu kueri
- Perbarui dengan hasil sql lain