Du måste använda PL/PgSQL EXECUTE
uttalande, via en DO
block eller PL/PgSQL-funktion (CREATE OR REPLACE FUNCTION ... LANGUAGE plpgsql
). Dynamisk SQL stöds inte i den vanliga SQL-dialekten som används av PostgreSQL, endast i den procedurmässiga PL/PgSQL-varianten.
DO
$$
BEGIN
EXECUTE format('CREATE TABLE %I AS SELECT * FROM backup', 'backup_' || to_char(CURRENT_DATE,'yyyy-mm-dd'));
END;
$$ LANGUAGE plpgsql;
format(...)
funktionens %I
och %L
format-specificerare gör korrekt identifierare respektive bokstavliga citat.
För bokstavliga ord rekommenderar jag att du använder EXECUTE ... USING
snarare än format(...)
med %L
, men för identifierare som tabell-/kolumnnamn formatet %I
mönster är ett trevligt kortfattat alternativ till verbose quote_ident
samtal.