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.