Postgresql session的自定义参数

时间:2014-08-14 09:55:32

标签: sql postgresql session

要记录PostgreSQL数据库中的表数据更改,我在表ON UPDATE和ON INSERT上创建了触发器,但是除了更改内容之外我想知道谁更改了它,但站点代码使用了一个" DB用户& #34;连接到DB,我可以通过CURRENT_USER变量获取。如何将一些参数("站点用户"名称)附加到数据库会话,以便稍后我可以在触发器功能中的DB中获取它。在网站上我使用SQLAlchemy。

2 个答案:

答案 0 :(得分:2)

很抱歉我正在回答我的问题,但我找到了另一个解决方案 使用自定义选项http://www.postgresql.org/docs/9.3/static/runtime-config-custom.html

在postgresql.conf中添加

如果版本> = 9.2

site.user = NULL

如果版本< = 9.1

custom_variable_classes = 'site'
site.user = NULL 

然后在交易范围

SELECT SET_CONFIG('site.user', 'user name', true); 
...
SELECT INTO site_user CURRENT_SETTING('site.user'); 

答案 1 :(得分:0)

本地无法用PostgreSQL做到这一点。一个选项可能是修改数据库连接代码(客户端),以便在每次连接时在数据库会话中设置该信息:

CREATE TEMPORARY TABLE active_user (site_user VARCHAR);
INSERT INTO active_user (site_user) VALUES (?);

然后在你的触发器中:

...
DECLARE site_user VARCHAR;
...
   SELECT INTO site_user site_user FROM active_user
...