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;
Nemůžete odkazovat na NEW
uvnitř řetězce dotazu. NEW
je viditelný v těle funkce, ale ne v EXECUTE
životní prostředí. Nejlepším řešením je předat hodnoty v USING
doložka.
Také jsem nahradil ekvivalent to_char(NEW.updt_ts, '"log"WW')
pro název tabulky. to_char()
je zde rychlejší a jednodušší.