首页 > 解决方案 > PostgreSQL:在完成之前通过 dblink 获取查询的 PID

问题描述

我想监视我通过 dblink 发送的查询dblink_send_query,因此我需要它的PID,以便我可以在 pg 表中搜索它。但是到目前为止,我只能在 dblink 完成后通过返回值获得PIDpg_backend_pid() ,或者通过使用查询字符串从 pg_stat_activity 中获取它来完成它,这不考虑多个相同的查询,或者对于那些查询来说真的不理想文字长。

那么如何在它完成之前获得 PID 呢?

select dblink_send_query('cn1', 'select pg_sleep(60)');
select dblink_send_query('cn2', 'select pg_sleep(60)');
select dblink_send_query('cn3', 'select pg_sleep(60)');

x86_64-pc-linux-gnu 上的 PostgreSQL 11.6,由 gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-39) 编译,64 位

标签: postgresqlpiddblink

解决方案


后端进程 ID 将在 dblink 连接的整个生命周期内保持不变。

因此,当您打开连接时,SELECT pg_backend_pid()首先运行并将结果保存在与连接关联的数据结构中。然后,您可以查询该数据结构以获取该连接的后端进程 ID。


推荐阅读