SQL Servfer 的 CONTEXT_INFO 的 PostgreSQL 等价物是啥?
Posted
技术标签:
【中文标题】SQL Servfer 的 CONTEXT_INFO 的 PostgreSQL 等价物是啥?【英文标题】:What's the PostgreSQL equivalent of SQL Servfer's CONTEXT_INFO?SQL Servfer 的 CONTEXT_INFO 的 PostgreSQL 等价物是什么? 【发布时间】:2010-10-16 07:43:48 【问题描述】:关于我的另一个问题"What’s the best way to audit log DELETEs?"。 CONTEXT_INFO
的 PostgreSQL 等价物是什么?
我想使用触发器记录删除,但由于我没有将数据库用户用作我的应用程序的逻辑用户,因此我无法将触发器代码中的 CURRENT_USER
记录为删除记录的用户。但是对于INSERT
和UPDATE
,可以从触发器记录记录更改,因为您可以在记录中添加一个用户字段,例如inserted_by
和last_updated_by
,并使用这些字段记录到审计表。
【问题讨论】:
请记住,不是每个人都知道 MSSQL,所以说“什么是 XXX 的等价物”并不是一个很好的问题——解释一下 CONTEXT_INFO 是什么,以及它的用途。然后 - 具有 Pg 技能的人可以检查如何获得给定的功能。 【参考方案1】:http://www.postgres.cz/index.php/PostgreSQL_SQL_Tricks_II#Any_other_session_variables
PostgreSQL 提供了更多变种,请看这个网站。
【讨论】:
仅链接的答案很糟糕。如果该网站离线怎么办?【参考方案2】:接受的答案已过时。
在最新版本的 postgresql(我认为是 9.3 或 9.4 之后)中,可以设置/检索配置变量仅对当前会话 [或事务] 有效。 Documentation Reference
设置会话变量的示例:
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)
【讨论】:
以上是关于SQL Servfer 的 CONTEXT_INFO 的 PostgreSQL 等价物是啥?的主要内容,如果未能解决你的问题,请参考以下文章