Anda harus menggunakan PL/PgSQL EXECUTE
pernyataan, melalui DO
blok atau fungsi PL/PgSQL (CREATE OR REPLACE FUNCTION ... LANGUAGE plpgsql
). SQL dinamis tidak didukung dalam dialek SQL biasa yang digunakan oleh PostgreSQL, hanya dalam varian PL/PgSQL prosedural.
DO
$$
BEGIN
EXECUTE format('CREATE TABLE %I AS SELECT * FROM backup', 'backup_' || to_char(CURRENT_DATE,'yyyy-mm-dd'));
END;
$$ LANGUAGE plpgsql;
format(...)
%I
function fungsi dan %L
format-specifier masing-masing melakukan pengidentifikasi dan kutipan literal yang tepat.
Untuk literal saya sarankan menggunakan EXECUTE ... USING
daripada format(...)
dengan %L
, tetapi untuk pengidentifikasi seperti nama tabel/kolom format %I
pattern adalah alternatif ringkas yang bagus untuk verbose quote_ident
panggilan.