Postgres 审计触发器仅由一行 UPDATE 触发
-
20-12-2019 - |
题
你好,我准备为 postgresql 服务器开发一个简单的审计触发器。根据这个 文档, ,我非常明白它是如何工作的。但我只想在更新特定行时记录我的活动。以下是链接中的代码。并且无论更新哪一行,它都会记录何时有更新。
IF (TG_OP = 'UPDATE') THEN
...
请帮助我如何为上面的代码给出条件。谢谢!
解决方案
触发器是用 PL/PgSQL 编写的。我强烈建议你学习 PL/PgSQL 手册 如果您要修改 PL/PgSQL 代码。
在触发器中,行数据位于 OLD
和 NEW
(为了 UPDATE
触发器)。所以你可以做 IF
像其他任何事情一样对其进行测试。例如。:
IF (TG_OP = 'UPDATE') THEN
IF NEW."name" = 'name_to_audit' OR OLD."name" = 'name_to_audit' THEN
-- do audit commands
END IF;
END IF;
两个都 NEW
和 OLD
进行测试,以防名称更改为感兴趣的名称。
在这种情况下,您可以将其更改为使用 WHEN
条款关于 CREATE TRIGGER
, ,因此除非满足审核条件,否则您根本不会触发触发器。看 这 WHEN
触发器子句.
这只是一个基本的编程问题;您需要学习编程语言才能使用它。
另请参阅 更新了 Pg 9.1 的触发器.
哦,记住要考虑一下 NULL
;记住 NULL = 'anything'
是 NULL
. 。使用 IS DISTINCT FROM
如果你想说“这些东西是相等的,或者都是空的”。
其他提示
从postgreSQL文档:
CREATE TRIGGER log_update
AFTER UPDATE ON accounts
FOR EACH ROW
WHEN (OLD.* IS DISTINCT FROM NEW.*)
EXECUTE PROCEDURE log_account_update();
.
这仅适用于该表的更新。对于插入和删除,您可以在没有查询的位置使用相同。希望这有助于他人。
不隶属于 StackOverflow