gpt4 book ai didi

postgresql - plpython 获取 INSERT TRIGGER 上的所有行

转载 作者:行者123 更新时间:2023-11-29 12:47:06 26 4
gpt4 key购买 nike

我正在尝试使用 python 触发器程序实现类似于复制的功能。

程序

CREATE OR REPLACE FUNCTION foo.send_payload()
RETURNS trigger AS
$$
import json, zmq

try:
payload = json.dumps(TD)
ctx = zmq.Context()
socket = ctx.socket(zmq.PUSH)
socket.connect("ipc:///tmp/feeds/0")
socket.send(payload)
socket.close()
except:
pass
$$
LANGUAGE plpython VOLATILE;

触发器

CREATE TRIGGER foo.my_trigger
AFTER INSERT
ON foo.my_table
FOR EACH ROW
EXECUTE PROCEDURE foo.send_payload();

这确实有效,但效率不高。行是批量插入的,我想重用套接字来发送所有行。但是,当我执行语句级触发器时,我无权访问这些行。

我正在考虑定义一个序列,该序列将是最后处理的行 ID。然后使用它在语句级触发器内使用 SELECT 获取过程中的所有数据。问题是似乎没有办法在不增加序列值的情况下获取序列值。

关于如何解决这个问题有什么建议吗?

最佳答案

使用两个触发器。 “FOR EACH ROW”会将行堆叠在某个临时位置(可能是 SD ),“FOR EACH STATEMENT”将从共享位置获取数据,发送并清除共享位置。

或者(我认为这是更好的主意),您可以使用 LISTEN/NOTIFY,就像我以前一样 described在我的博客中。

关于postgresql - plpython 获取 INSERT TRIGGER 上的所有行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14739834/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com