我想使用触发器实现审计日志,触发器会在创建,更改和删除的数据上触发以存储一些值。这些触发器应该能够使用用户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,但会看看旧的实现。 –