Joe*_*Joe 23 postgresql trigger plpgsql
我有一个系统,我无法控制某些表的设计(通过 Slony-I 复制),所以我有一系列我们称之为“影子表”的东西,我从复制的表中提取一些信息,并将其存储在我需要的处理形式中,同时剥离我想忽略的记录。
现在,在设置新副本后,我运行更新并将值设置回自身(例如,UPDATE tablename SET field=field)以强制运行触发器,但有些表有数百万条记录,并且还在增长,可能需要 30 分钟. (然后还有真空)。
有没有更好的方法来触发它,或者有什么方法可以编写一个函数,使其可以处理传入的输入或NEW取决于调用上下文?我不愿意保留两个不同的功能,因为我已经看到太多次更新一个而不是另一个。
Pet*_*aut 20
可以使用以下模板来完成:
CREATE TABLE tablename ( ... );
/* for direct invocation */
CREATE FUNCTION propagate_data(newrow tablename) RETURNS void
LANGUAGE plpgsql
AS $$
BEGIN
INSERT INTO other_table VALUES (newrow.a, newrow.b, ...);
END:
$$;
/* trigger function wrapper */
CREATE FUNCTION propagate_data_trg() RETURNS trigger
LANGUAGE plpgsql
AS $$
BEGIN
PERFORM propagate_data(NEW);
END;
$$;
CREATE TRIGGER propagate_data AFTER INSERT ON tablename FOR EACH ROW
EXECUTE PROCEDURE propagate_data_trg();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6654 次 |
| 最近记录: |