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;
Bạn không thể tham chiếu NEW bên trong chuỗi truy vấn. NEW hiển thị trong thân hàm, nhưng không hiển thị bên trong EXECUTE Môi trường. Giải pháp tốt nhất là chuyển các giá trị trong USING mệnh đề.
Tôi cũng đã thay thế to_char(NEW.updt_ts, '"log"WW') tương đương cho tên bảng. to_char()
nhanh hơn và đơn giản hơn ở đây.