Będziesz musiał użyć PL/PgSQL EXECUTE
oświadczenie, poprzez DO
blok lub funkcja PL/PgSQL (CREATE OR REPLACE FUNCTION ... LANGUAGE plpgsql
). Dynamiczny SQL nie jest obsługiwany w zwykłym dialekcie SQL używanym przez PostgreSQL, tylko w proceduralnym wariancie PL/PgSQL.
DO
$$
BEGIN
EXECUTE format('CREATE TABLE %I AS SELECT * FROM backup', 'backup_' || to_char(CURRENT_DATE,'yyyy-mm-dd'));
END;
$$ LANGUAGE plpgsql;
format(...)
%I
funkcji i %L
specyfikatory-formatu dokonują odpowiednio właściwego identyfikatora i cytowania literału.
Dla literałów polecam użyć EXECUTE ... USING
zamiast format(...)
z %L
, ale dla identyfikatorów, takich jak nazwy tabel/kolumn, format %I
wzorzec to fajna, zwięzła alternatywa dla gadatliwego quote_ident
połączeń.