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;
Anda tidak dapat mereferensikan NEW di dalam string kueri. NEW terlihat di badan fungsi, tetapi tidak di dalam EXECUTE lingkungan. Solusi terbaik adalah meneruskan nilai dalam USING klausa.
Saya juga mengganti to_char(NEW.updt_ts, '"log"WW') yang setara untuk nama tabel. to_char()
lebih cepat dan lebih sederhana di sini.