Budete muset použít PL/PgSQL EXECUTE
příkazem DO
blok nebo funkce PL/PgSQL (CREATE OR REPLACE FUNCTION ... LANGUAGE plpgsql
). Dynamické SQL není podporováno v běžném SQL dialektu používaném PostgreSQL, pouze v procedurální variantě 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
funkce a %L
specifikátory formátu dělají správný identifikátor a doslovné citace.
Pro literály doporučuji použít EXECUTE ... USING
spíše než format(...)
s %L
, ale pro identifikátory, jako jsou názvy tabulek/sloupců, formát %I
vzor je pěkná stručná alternativa k podrobnému quote_ident
hovory.