簡體   English   中英

FOR EACH STATEMENT 和 FOR EACH ROW 觸發執行順序

[英]FOR EACH STATEMENT and FOR EACH ROW triggers order of execution

在 postgres 數據庫中,假設我有 3 個表, tb1tb2tb3

tb2在使用觸發器T1tb1上插入每一行后得到更新,而tb3在使用觸發器T2tb1上插入每個語句后得到更新。

我的情況是我不希望 tb3 在 tb1 和 tb2 完成更新之前得到更新,因為她同時使用兩者。

現在,如果我執行一個查詢,在最后一行插入 tb1 后在 tb1 上插入 10k 行,語句將結束。 觸發器T2將觸發。 我的問題是, T2會在 tb2 獲得最后 10k 行之前或之后觸發嗎?

如果之前,您能否提出一個解決方案,以便 tb3 在兩個表都完成所有插入之后才得到更新?

該文檔具有所需的信息:

語句級BEFORE觸發器自然會在語句開始執行任何操作之前觸發,而語句級AFTER觸發器會在語句的最后觸發。 這些類型的觸發器可以在表、視圖或外表上定義。 行級BEFORE觸發器在對特定行進行操作之前立即觸發,而行級AFTER觸發器在語句結束時觸發(但在任何語句級AFTER觸發器之前)。

[...]

如果在同一關系上為同一事件定義了多個觸發器,則觸發器將按觸發器名稱的字母順序觸發。

所以你可以依賴t2t1之后運行。

暫無
暫無

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

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