PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

PostgreSQL - dynamischer Wert als Tabellenname

Sie müssen PL/PgSQL EXECUTE verwenden -Anweisung über ein DO Block oder PL/PgSQL-Funktion (CREATE OR REPLACE FUNCTION ... LANGUAGE plpgsql ). Dynamisches SQL wird im gewöhnlichen SQL-Dialekt, der von PostgreSQL verwendet wird, nicht unterstützt, nur in der prozeduralen PL/PgSQL-Variante.

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

Das format(...) %I der Funktion und %L format-spezifizierer führen entsprechende Bezeichner bzw. wörtliche Anführungszeichen aus.

Für Literale empfehle ich die Verwendung von EXECUTE ... USING statt format(...) mit %L , aber für Bezeichner wie Tabellen-/Spaltennamen das Format %I Muster ist eine schöne prägnante Alternative zum ausführlichen quote_ident Anrufe.