PostgreSQL 派生一个新进程来处理每个连接。您可以轻松获取此进程的 PID:
SELECT pg_backend_pid();
这对应于标准管理工具( 、 等)中可见的进程top
ID ps
。您也可以使用标准工具 ( ) 终止连接kill
,或者在具有适当权限的情况下,通过说SELECT pg_terminate_backend(pid)
.
当前会话的列表也可以在数据库中访问:
SELECT * FROM pg_stat_activity;
最后一点:PID 保证在查询运行时是唯一的,但最终会被操作系统重新使用。backend_start
您可以通过将 PID 与 的列配对来确保唯一性pg_stat_activity
。就此而言,您不妨将其与您的日志记录混为一谈:
INSERT INTO log_table (pid, backend_start, message, backtrace)
SELECT procpid, backend_start, 'my message', 'my backtrace'
FROM pg_stat_activity
WHERE procpid=pg_backend_pid();