簡體   English   中英

如何在Postgres中使用“ for語句”觸發器?

[英]How to use 'for statement' triggers in postgres?

如果我們像下面這樣編寫FOR STATEMENT觸發器,我們如何才能僅訪問觸發器過程/函數中的更新行

CREATE FUNCTION func1()
RETURNS trigger AS $$
BEGIN
    --access only updated/inserted rows here???
    RETURN null;
END;
$$ LANGUAGE plpgsql;

CREATE TRIGGER trig1
AFTER UPDATE OR DELETE OR INSERT
ON tbl1 FOR STATEMENT
EXECUTE PROCEDURE func1();

我的意思是當有多個行更新一次,如下所示

update tbl1 set col1=1 where col2 in (2,3,4,5,6)

現在,可以在第10頁中的插入記錄表中使用標識符:

CREATE TRIGGER transfer_insert
AFTER INSERT ON transfer
REFERENCING NEW TABLE AS inserted
FOR EACH STATEMENT
EXECUTE PROCEDURE check_transfer_balances_to_zero();

摘自pg 10 doc: https : //www.postgresql.org/docs/10/static/sql-createtrigger.html

目前,不支持FOR EACH STATEMENT觸發器的NEWOLD偽關系。

您必須使用FOR EACH ROW觸發器。

從理論上講,PostgreSQL可能會通過一個一次性生成的密鑰將新行和舊行版本的偽表連接在一起。 或一個包含新元組和舊元組作為組合類型的表。 但是,目前尚不支持此功能,據我所知,尚無人在為此提供支持。

對於某些應用程序,值得使用FOR EACH ROW觸發器將其INSERTTEMPORARY表中,然后在最終的FOR EACH STATEMENT觸發器中處理整個批次。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM