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 记录为删除记录的用户。但是对于INSERTUPDATE,可以从触发器记录记录更改,因为您可以在记录中添加一个用户字段,例如inserted_bylast_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 等价物是啥?的主要内容,如果未能解决你的问题,请参考以下文章

sql 2008 r2 在sql 2008上兼容么

sql SQL Server和Oracle SQL的SQL语法的一些示例

什么是sql注入如何防止sql注入

SQL查询语句

SQL基础

PL/SQL开发中动态SQL的使用方法