我有一个触发器函数,它只将插入的值复制到另一个表中。然后,每天晚上我都需要为某些导出操作删除并重新创建此触发器。
--trigger function
CREATE OR REPLACE FUNCTION mev_copy() RETURNS trigger AS $mev_copy$
BEGIN INSERT INTO measurement_events_copy SELECT NEW.*;
RETURN NEW;
END;
问题是有时触发器无法启动:CREATE TRRIGGER 命令永远不会返回,数据库似乎已锁定并将所有查询置于“PARSE 等待”状态。昨天这样持续了 6 个小时,直到我杀死了创建触发器。
当自动清理表 measurement_events 时,问题始终如一地出现。同时这个表有一个新的待处理的 AccessExclusiveLock 请求。
这是创建触发器,没什么特别的:
--CREATE TRIGGER that hangs sometimes
CREATE TRIGGER mev_copy AFTER INSERT ON measurement_events FOR EACH ROW EXECUTE PROCEDURE mev_copy();
Postgres 版本是 8.4。有什么见解吗?
无法使用 PG 8.4 完成。它实际上在 postgres 的 TODO 上以减少触发要求: