PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

PostgreSQL:valore dinamico come nome della tabella

Dovrai usare PL/PgSQL EXECUTE istruzione, tramite un DO blocco o funzione PL/PgSQL (CREATE OR REPLACE FUNCTION ... LANGUAGE plpgsql ). L'SQL dinamico non è supportato nel dialetto SQL ordinario utilizzato da PostgreSQL, solo nella variante procedurale PL/PgSQL.

DO
$$
BEGIN
EXECUTE format('CREATE TABLE %I AS SELECT * FROM backup', 'backup_' || to_char(CURRENT_DATE,'yyyy-mm-dd'));
END;
$$ LANGUAGE plpgsql;

Il format(...) %I della funzione e %L gli specificatori di formato eseguono rispettivamente l'identificatore corretto e la virgoletta letterale.

Per i letterali consiglio di usare EXECUTE ... USING invece di format(...) con %L , ma per identificatori come nomi di tabelle/colonne il formato %I pattern è una bella alternativa concisa al dettagliato quote_ident chiamate.