关于我的另一个问题“审计日志删除的最佳方法是什么?” . PostgreSQL 相当于CONTEXT_INFO
什么?
我想使用触发器记录删除,但由于我没有将数据库用户用作我的应用程序的逻辑用户,因此我无法CURRENT_USER
将触发器代码中的用户记录为删除记录的用户。但是对于INSERT
并且UPDATE
可以从触发器记录记录更改,因为您可以在记录中添加一个用户字段,比如inserted_by
and last_updated_by
,并使用这些字段记录到审计表。
关于我的另一个问题“审计日志删除的最佳方法是什么?” . PostgreSQL 相当于CONTEXT_INFO
什么?
我想使用触发器记录删除,但由于我没有将数据库用户用作我的应用程序的逻辑用户,因此我无法CURRENT_USER
将触发器代码中的用户记录为删除记录的用户。但是对于INSERT
并且UPDATE
可以从触发器记录记录更改,因为您可以在记录中添加一个用户字段,比如inserted_by
and last_updated_by
,并使用这些字段记录到审计表。
http://www.postgres.cz/index.php/PostgreSQL_SQL_Tricks_II#Any_other_session_variables
PostgreSQL 提供了更多的变种,请看这个网站。
接受的答案已过时。
在 postgresql 的最新版本中(我认为是 9.3 或 9.4),可以设置/检索配置变量仅在当前会话 [或事务] 中有效。文档参考
设置会话变量的示例:
hal=# select set_config('myvar.foo', 'bar', false);
set_config
------------
bar
(1 row)
hal=# select current_setting('myvar.foo');
current_setting
-----------------
bar
(1 row)
可以current_setting
像使用其他集合返回函数一样使用该函数。
例子:
create table customers (id int);
insert into customers values (1), (2), (3), (4);
select c.*, s.*
from customers c
left join current_setting('myvar.foo') s
on c.id = length(s)