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.