And*_*rew 6 postgresql trigger
我想向 PG 添加一些审计触发器,以记录对表的所有更改。我找到了一个示例触发器(wiki.postgresql.com - 9.1+ 审计触发器),它让我开始了。
我想要做的是自动传递一些附加数据,例如 theuser-id或 other 键,以便触发器可以将更改链接回进行更改的应用程序用户。基本流程如下:
set conn_context = {userid};)使用 MS SQL 时,我能够通过执行SET CONTEXT_INFO ...data.... 我希望有一种方法可以为 PG 做到这一点;我还没有找到,但这可能是糟糕的 google-fu。
老问题,但仍然有效,所以这就是我最终使用的。
在9.6 及更高版本上,要设置以下任一值都可以:
select set_config('app.userid', '3', true)SET LOCAL "app.userid" = 3;(或者'3')对于任何远程现代 postgres,您可以读取该值并返回null(如果未设置)。感谢@motcke 在评论中提供更新。
-- pass `true` to return null if missing (see original answer)
userid := current_setting('app.user_id', true)
Run Code Online (Sandbox Code Playgroud)
我最终将用户 ID 或其他字段的查找包装在函数中,以处理类型转换以及它可能未设置的事实:
对于版本<= 9.5(正如所关注的问题):
CREATE OR REPLACE FUNCTION app_get_userid() RETURNS INT AS $$
DECLARE userid integer;
BEGIN
BEGIN
userid := current_setting('app.userid');
EXCEPTION
WHEN OTHERS THEN userid := NULL;
END;
return userid;
END;
$$ LANGUAGE plpgsql;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
772 次 |
| 最近记录: |