PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

PostgreSQL - valeur dynamique comme nom de table

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.