EDIT: Saya meninggalkan jawaban asli yang diterima apa adanya, tetapi harap perhatikan bahwa edit di bawah ini, seperti yang disarankan oleh a_horse_with_no_name, adalah metode yang disukai untuk membuat tabel sementara menggunakan VALUES.
Jika Anda hanya ingin memilih dari beberapa nilai, bukan hanya membuat tabel dan memasukkannya, Anda dapat melakukan sesuatu seperti:
WITH vals (k,v) AS (VALUES (0,-9999), (1, 100))
SELECT * FROM vals;
Untuk benar-benar membuat tabel sementara dengan cara yang serupa, gunakan:
WITH vals (k,v) AS (VALUES (0,-9999), (1, 100))
SELECT * INTO temporary table temp_table FROM vals;
EDIT: Seperti yang ditunjukkan oleh a_horse_with_no_name, dalam dokumen itu menyatakan bahwa CREATE TABLE AS...
secara fungsional mirip dengan SELECT INTO ...
, tetapi yang pertama adalah superset dari yang terakhir dan yang SELECT INTO
digunakan dalam plpgslq untuk menetapkan nilai ke variabel sementara - sehingga akan gagal dalam kasus itu. Oleh karena itu, sementara contoh di atas berlaku untuk SQL biasa, CREATE TABLE
formulir harus lebih disukai.
CREATE TEMP TABLE temp_table AS
WITH t (k, v) AS (
VALUES
(0::int,-99999::numeric),
(1::int,100::numeric)
)
SELECT * FROM t;
Catatan, juga dari komentar oleh a_horse_with_no_name, dan dalam pertanyaan awal OP, ini termasuk pemeran untuk tipe data yang benar di dalam daftar nilai dan menggunakan pernyataan CTE (WITH).
Juga, sebagaimana ditunjukkan dalam jawaban Evan Carrol, permintaan CTE adalah pagar pengoptimalan , yaitu, CTE selalu terwujud. Ada banyak alasan bagus untuk menggunakan CTE, tetapi bisa ada pencapaian kinerja yang cukup signifikan, jika tidak digunakan dengan hati-hati. Namun, ada banyak contoh di mana pagar pengoptimalan sebenarnya dapat meningkatkan kinerja, jadi ini adalah sesuatu yang harus diperhatikan, bukan untuk dihindari secara membabi buta.