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;
Nie możesz odwołać się do NEW
wewnątrz ciągu zapytania. NEW
jest widoczny w treści funkcji, ale nie w EXECUTE
środowisko. Najlepszym rozwiązaniem jest przekazanie wartości w USING
klauzula.
Podstawiłem również odpowiednik to_char(NEW.updt_ts, '"log"WW')
dla nazwy tabeli. to_char()
jest tu szybszy i prostszy.