1

我正在尝试使用 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在语句级触发器内部获取过程中的所有数据。问题是似乎没有一种方法可以在不增加序列值的情况下获取它。

关于如何解决这个问题的任何建议?

4

1 回答 1

3

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

或者(我认为这是更好的主意),您可以使用 LISTEN/NOTIFY,正如我曾经在我的博客中描述的那样。

于 2013-02-06T22:19:45.557 回答