plpython获取INSERT TRIGGER上的所有行

时间:2013-02-06 22:09:55

标签: postgresql plpython

我试图用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。 问题是,似乎没有一种获取序列值而不增加它的方法。

有关如何解决此问题的任何建议吗?

1 个答案:

答案 0 :(得分:3)

使用两个触发器。 "对于每一行"将行堆叠在一些临时位置(可能是SD),以及"对于每个声明"将从共享位置获取数据,发送和清除共享位置。

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