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

PostgreSQL 9.3-Triggerfunktion zum Einfügen in eine Tabelle mit parametrisiertem Namen

CREATE FUNCTION log_roll_test()
  RETURNS trigger AS
$func$
BEGIN
   EXECUTE format('INSERT INTO %I SELECT ($1).*'
                , to_char(NEW.updt_ts, '"log"WW'))   -- child table name
   USING NEW;
   RETURN NULL;
END
$func$ LANGUAGE plpgsql;

Sie können nicht auf NEW verweisen innerhalb der Abfragezeichenfolge. NEW ist im Funktionsrumpf sichtbar, aber nicht innerhalb von EXECUTE Umgebung. Die beste Lösung besteht darin, die Werte in USING zu übergeben Klausel.

Ich habe auch das Äquivalent to_char(NEW.updt_ts, '"log"WW') ersetzt für den Tabellennamen. to_char() ist hier schneller und einfacher.