Ще трябва да използвате PL/PgSQL EXECUTE изявление чрез DO блокова или PL/PgSQL функция (CREATE OR REPLACE FUNCTION ... LANGUAGE plpgsql ). Динамичният SQL не се поддържа в обикновения SQL диалект, използван от PostgreSQL, а само в процедурния вариант 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 на функцията и %L спецификаторите на формат правят правилен идентификатор и съответно буквално цитиране.
За литералите препоръчвам да използвате EXECUTE ... USING вместо format(...) с %L , но за идентификатори като имена на таблица/колона форматът %I шаблонът е хубава кратка алтернатива на многословния quote_ident обаждания.