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

2 つのトリガーを使用します。「FOR EACH ROW」は行を一時的な場所 (おそらくSD ) にスタックし、「FOR EACH STATEMENT」は共有場所からデータを取得し、送信し、共有場所をクリアします。

別の方法として (そのほうがよいと思います)、以前ブログで説明したように、LISTEN/NOTIFY を使用できます。

于 2013-02-06T22:19:45.557 に答える