Ще трябва да използвате 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
обаждания.