U moet de PL/PgSQL EXECUTE
. gebruiken statement, via een DO
blok- of PL/PgSQL-functie (CREATE OR REPLACE FUNCTION ... LANGUAGE plpgsql
). Dynamische SQL wordt niet ondersteund in het gewone SQL-dialect dat door PostgreSQL wordt gebruikt, alleen in de procedurele PL/PgSQL-variant.
DO
$$
BEGIN
EXECUTE format('CREATE TABLE %I AS SELECT * FROM backup', 'backup_' || to_char(CURRENT_DATE,'yyyy-mm-dd'));
END;
$$ LANGUAGE plpgsql;
Het format(...)
functie's %I
en %L
format-specifiers doen respectievelijk de juiste identifier en letterlijke citaten.
Voor letterlijke termen raad ik aan om EXECUTE ... USING
te gebruiken in plaats van format(...)
met %L
, maar voor identifiers zoals tabel-/kolomnamen het formaat %I
patroon is een mooi beknopt alternatief voor uitgebreide quote_ident
oproepen.