RED*_*KEY 6 delphi postgresql database-connection
我有一个Postgres数据库(9),我正在编写触发器.我希望触发器设置修改时间和记录的用户ID.在Firebird中,您有一个可以在触发器中使用的CONNECTIONID,因此您可以在连接到数据库时向表中添加值(这是一个桌面应用程序,因此连接在应用程序的生命周期内是持久的),类似于这个:
UserId | ConnectionId --------------------- 544 | 3775
然后在触发器中查找connectionid 3775属于用户ID 544并使用544作为修改记录的用户.
我可以在Postgres中使用类似的东西吗?
你可以使用进程ID.它可以通过以下方式检索:
pg_backend_pid()
Run Code Online (Sandbox Code Playgroud)
使用此pid,您还可以使用表pg_stat_activity获取有关当前后端的更多信息,但是您已经应该知道所有内容,因为您正在使用此后端.
或更好.只需创建一个序列,并为每个连接从中检索一个值:
CREATE SEQUENCE 'connectionids';
Run Code Online (Sandbox Code Playgroud)
然后:
SELECT next_val('connectionids');
Run Code Online (Sandbox Code Playgroud)
在每个连接中,检索连接唯一ID.
一种方法是使用custom_variable_classes配置选项。它似乎旨在允许配置附加模块,但也可以用于在当前数据库会话中存储任意值。
需要添加以下内容postgresql.conf:
custom_variable_classes = 'local'
Run Code Online (Sandbox Code Playgroud)
首次连接数据库时,可以在定制类中存储所需的任何信息,如下所示:
SET local.userid = 'foobar';
Run Code Online (Sandbox Code Playgroud)
然后,您可以使用以下current_setting()函数检索此值:
SELECT current_setting('local.userid');
Run Code Online (Sandbox Code Playgroud)
将条目添加到日志表可能如下所示:
INSERT INTO audit_log VALUES (now(), current_setting('local.userid'), ...)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6647 次 |
| 最近记录: |