因此,当他调用函数时,我不仅尝试记录 postgres 用户,还尝试从我的表中记录他的 ID(例如)Person (person_id)。
到目前为止,据我所知,我几乎可以从这些系统表中获得所需的所有信息:
pg_stat_activity
pg_stat_statements
如果我激活它(但由于某些限制可能无法激活)
但我似乎无法弄清楚的部分是我是否想从(例如)用户表(user_id
例如)记录用户的 ID。
基本上我想创建一个只存放上个月日志的小表,我将插入其中。
- user_id (不是系统 id,而是来自我自己的表)
- IP地址
- 他调用函数/查询时的时间戳记
- 他执行的查询
我的主要问题是 user_id 部分,因为其他 3 个值已经存在于pg_stat_activity
( client_addr
, query_start
, query
)
如果没有简单的方法来实现这一点,假设我想创建一个函数,该函数将根据返回的参数以某种方式选择 user_id pg_stat_activity
,但我似乎无法弄清楚我将如何做到这一点。隐藏的表参数tableoid, cmin, cmax, xmin, xmax, ctid
在这里对我没有帮助,至少我看不到如何,也许我错过了什么?
根据您的评论,
INSERT
可能看起来像这样:识别当前会话的关键是后端进程的进程ID。
pg_stat_activity 有 application_name。您可以使用它来附加 person_id。在每个查询之前,您可以在查询下方运行
我们使用这种方式来记录触发查询的 user_id 和模块。如果您以日志格式指定,此 application_name 也会记录在实际日志中。