你好,我准备为 postgresql 服务器开发一个简单的审计触发器。根据这个 文档, ,我非常明白它是如何工作的。但我只想在更新特定行时记录我的活动。以下是链接中的代码。并且无论更新哪一行,它都会记录何时有更新。

    IF (TG_OP = 'UPDATE') THEN
...

请帮助我如何为上面的代码给出条件。谢谢!

有帮助吗?

解决方案

触发器是用 PL/PgSQL 编写的。我强烈建议你学习 PL/PgSQL 手册 如果您要修改 PL/PgSQL 代码。

在触发器中,行数据位于 OLDNEW (为了 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;

两个都 NEWOLD 进行测试,以防名称更改为感兴趣的名称。

在这种情况下,您可以将其更改为使用 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();
.

这仅适用于该表的更新。对于插入和删除,您可以在没有查询的位置使用相同。希望这有助于他人。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top