2017-02-20 54 views
2

無論何時將新行插入到表中,我都試圖觸發pg_notify,但不是每個新插入的行都得到通知,我只總共收到一個通知。如何在postgres中爲每個插入的行獲取pg_notify通知?

觸發是

CREATE TRIGGER "testNotify" 
AFTER INSERT ON mine.test 
FOR EACH ROW EXECUTE PROCEDURE mine."testNotify"() 

功能是

CREATE OR REPLACE FUNCTION mine."testNotify"() 
    RETURNS TRIGGER AS $$ 
DECLARE 
BEGIN 
    PERFORM pg_notify('testNotify', 'test payload'); 
    RETURN NEW; 
END; 
$$ LANGUAGE plpgsql; 

插入圖是

我已經成功地插入新約100,000行這種方式,所以我期望看到很多通知,如果我的應用程序不是LISTEN "testNotify",但它會得到只有1個,通道爲testNotify,有效載荷爲test payload。我上面做錯了什麼?

回答

3

Quote from the manual

如果相同的信道名稱是從同一個事務具有相同有效載荷串信號發送多次,數據庫服務器可以決定只提供一個單一的通知。

(重點煤礦)

和:

在另一方面,具有鮮明的有效載荷串通知將始終

所以,如果交付截然不同的通知您希望確保每行獲得一個通知,將該行的主鍵包含在有效負載中。

相關問題