Vous devrez utiliser le PL/PgSQL EXECUTE
déclaration, via un DO
bloc ou fonction PL/PgSQL (CREATE OR REPLACE FUNCTION ... LANGUAGE plpgsql
). Le SQL dynamique n'est pas pris en charge dans le dialecte SQL ordinaire utilisé par PostgreSQL, uniquement dans la variante procédurale PL/PgSQL.
DO
$$
BEGIN
EXECUTE format('CREATE TABLE %I AS SELECT * FROM backup', 'backup_' || to_char(CURRENT_DATE,'yyyy-mm-dd'));
END;
$$ LANGUAGE plpgsql;
Le format(...)
%I
de la fonction et %L
Les spécificateurs de format font respectivement l'identifiant et la citation littérale appropriés.
Pour les littéraux, je recommande d'utiliser EXECUTE ... USING
plutôt que format(...)
avec %L
, mais pour les identifiants tels que les noms de table/colonne, le format %I
pattern est une belle alternative concise au verbeux quote_ident
appels.