Ответ 1
Вам нужно будет использовать инструкцию 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
.