您好我正在开发一个简单的postgresql服务器审计触发器。根据这document,我非常明白它是如何工作的。但是我只想在更新特定行时记录我的活动。以下是链接中的代码。并且它记录何时更新,而不管哪一行被更新。Postgres审计触发器只能触发一行更新
IF (TG_OP = 'UPDATE') THEN
...
请帮助我如何给上述代码一个条件。谢谢!
您好我正在开发一个简单的postgresql服务器审计触发器。根据这document,我非常明白它是如何工作的。但是我只想在更新特定行时记录我的活动。以下是链接中的代码。并且它记录何时更新,而不管哪一行被更新。Postgres审计触发器只能触发一行更新
IF (TG_OP = 'UPDATE') THEN
...
请帮助我如何给上述代码一个条件。谢谢!
触发器是用PL/PgSQL编写的。如果您要修改PL/PgSQL代码,我强烈建议您研究PL/PgSQL manual。
在触发器中,行数据是在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
的情况下,被测试的名字被从/变为感兴趣的名称。
在这种情况下,您可以改为使用CREATE TRIGGER
上的WHEN
子句,因此除非符合审核条件,否则根本不会触发触发器。见the WHEN
clause on triggers。
这只是一个基本的编程问题;你需要学习编程语言才能使用它。请参阅updated trigger for Pg 9.1。
哦,并记住想想NULL
;记得NULL = 'anything'
是NULL
。如果你想说“这些东西是平等的,或者都是空的”,请使用IS DISTINCT FROM
。
我不能尝试这个解决方案,直到我回到工作明天,但它似乎完美谢谢! – user3242117
*“但我只想在更新某行时记录我的活动。”*好的。哪一排?在SQL中,您需要知道表的名称,一个或多个列的名称以及该键的值。 –
在名为'User'的表中,我们说'name'row varchar(32)。 – user3242117