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.