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.