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.