Du skal bruge PL/PgSQL EXECUTE
sætning via en DO
blok eller PL/PgSQL-funktion (CREATE OR REPLACE FUNCTION ... LANGUAGE plpgsql
). Dynamisk SQL understøttes ikke i den almindelige SQL-dialekt, der bruges af PostgreSQL, kun i den proceduremæssige 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;
format(...)
funktionens %I
og %L
format-specificatorer udfører korrekt identifikator og bogstavelige citater, henholdsvis.
For bogstaver anbefaler jeg at bruge EXECUTE ... USING
i stedet for format(...)
med %L
, men for identifikatorer som tabel-/kolonnenavne formatet %I
mønster er et godt kortfattet alternativ til verbose quote_ident
opkald.