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.