![](/img/trans.png)
[英]BEFORE and AFTER triggers, FOR EACH ROW and FOR EACH STATEMENT triggers
[英]FOR EACH STATEMENT and FOR EACH ROW triggers order of execution
在 postgres 數據庫中,假設我有 3 個表, tb1 , tb2和tb3 。
tb2在使用觸發器T1在tb1上插入每一行后得到更新,而tb3在使用觸發器T2在tb1上插入每個語句后得到更新。
我的情況是我不希望 tb3 在 tb1 和 tb2 完成更新之前得到更新,因為她同時使用兩者。
現在,如果我執行一個查詢,在最后一行插入 tb1 后在 tb1 上插入 10k 行,語句將結束。 觸發器T2將觸發。 我的問題是, T2會在 tb2 獲得最后 10k 行之前或之后觸發嗎?
如果之前,您能否提出一個解決方案,以便 tb3 在兩個表都完成所有插入之后才得到更新?
該文檔具有所需的信息:
語句級
BEFORE
觸發器自然會在語句開始執行任何操作之前觸發,而語句級AFTER
觸發器會在語句的最后觸發。 這些類型的觸發器可以在表、視圖或外表上定義。 行級BEFORE
觸發器在對特定行進行操作之前立即觸發,而行級AFTER
觸發器在語句結束時觸發(但在任何語句級AFTER
觸發器之前)。[...]
如果在同一關系上為同一事件定義了多個觸發器,則觸發器將按觸發器名稱的字母順序觸發。
所以你可以依賴t2
在t1
之后運行。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.