我想使用觸發器實現審計日誌,觸發器會在創建,更改和刪除的數據上觸發以存儲一些值。這些觸發器應該能夠使用用戶ID進行更改並由Web應用程序管理。我對提供這些數據有一些想法,但我似乎並沒有完全理解觸發器的執行上下文是什麼。我讀過PostgreSQL文檔Overview of Trigger Behavior和其他人,但我的問題似乎沒有得到回答。PostgreSQL中數據庫觸發器的執行上下文
我想知道的是客戶端會話與一個正在運行的事務之間的交互以及觸發器執行和兩者的生命週期以及它們如何相互依賴。根據我的理解,觸發器在數據庫內獨立於創建導致觸發器執行的事件的客戶端會話執行。那是對的嗎?這意味着觸發器及其處理不會影響客戶端請求的性能,客戶端可以隨時關閉會話。如果兩者都是獨立的,那麼觸發器如何得到關於客戶回滾事務的通知,這在邏輯上意味着根本沒有數據被改變?或者觸發器onyl在提交事務後執行,因爲它們獨立運行?
或者觸發器是否在客戶端會話中執行異步,從而創建導致觸發器執行的事件?這意味着如果客戶因任何原因關閉了會話,觸發器也會中止。它們的更改直接綁定到客戶端交易,並且可以回滾。
我需要了解行爲以瞭解我想要在another question中做什麼。
感謝您的輸入!
你看過現有的審計觸發器實現嗎? https://wiki.postgresql.org/wiki/Audit_trigger_91plus和 https://github.com/2ndQuadrant/audit-trigger – bma
不,觸發器不是獨立的和異步的,觸發器是事務的固有部分,它在用戶會話中執行。如果在操作結束後(但在提交之前)發出回滾,則事務和trigerr所做的所有更改都將回滾。 – krokodilko
@bma:不,我沒有,謝謝你的鏈接。我無法使用新版本,因爲我堅持8.4,但會看看舊的實現。 –