【问题标题】:PostgreSQL: Get PID of a query via dblink before it finishesPostgreSQL:在完成之前通过 dblink 获取查询的 PID
【发布时间】:2019-12-11 11:11:18
【问题描述】:

我想监控我通过 dblink dblink_send_query 发送的查询,因此我需要它的 PID 以便我可以在 pg 表中搜索它。 但到目前为止,我只能在 dblink 完成后通过返回值 pg_backend_pid() 获得 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(红帽 4.8.5-39),64 位

【问题讨论】:

    标签: postgresql pid dblink


    【解决方案1】:

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

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

    【讨论】:

    • 但问题是 dblink 创建它自己的连接,所以如果我使用 SELECT pg_backend_pid() 它会给我当前的连接而不是 dblink 的连接,请告诉我如何在这个例子
    • do $$ 开始执行 dblink_connect ('cn1', 'fdw_cdc');执行 dblink_connect ('cn2', 'fdw_cdc');执行 dblink_connect ('cn3', 'fdw_cdc');执行 dblink_send_query('cn1', 'select pg_sleep(60)');执行 dblink_send_query('cn2', 'select pg_sleep(60)');执行 dblink_send_query('cn3', 'select pg_sleep(60)');执行 pg_sleep(60);执行 dblink_disconnect ('cn1');执行 dblink_disconnect ('cn2');执行 dblink_disconnect ('cn3');结束$$
    • 没有。 perform dblink_connect ('cn1', 'fdw_cdc');,然后SELECT dblink_send_query('cn1', 'select pg_backend_pid()') 并记住结果以备后用。
    • 好的,我明白你的意思,但是有一个问题,如果我在函数中使用 dblink 连接来获取我的 pid,我将无法再使用该连接,因为当我尝试在我之后发送查询时获取 pid 我收到错误“无法发送查询:另一个命令已在进行中”请参阅此处codepile.net/pile/VdNJKndb
    • 我忘记了...使用dblink_exec 进行该查询以获得同步执行。
    【解决方案2】:

    我遇到了同样的问题。我使用下面的方法来解决同样的问题。

    select dblink_connect('cn1',*connectionstring*);
    select pid from dblink('cn1', 'select pg_backend_pid()') as (pid integer);
    select dblink_send_query('cn2', 'select pg_sleep(60)');
    

    【讨论】:

    • 请在您的答案中添加一些解释,以便其他人可以从中学习
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多