PostgreSQL 检查查询是否仍在运行

13

在我的工作中,我需要在Postgresql数据库中构建一个新的连接表,其中涉及对两个现有表进行大量的计算。 由于该过程需要耗费很长时间,因此我在周五离开前设置了它在周末运行。 现在,我想检查查询是否已完成。

我如何在不在运行命令的计算机上的情况下检查INSERT命令是否已完成?(不,我不知道它应该添加多少行。)


1
检查 pg_stat_activity - Dave
以下是一个例子:http://www.postgresql.org/message-id/AANLkTikPosCAdKDUZxCKmjzbj8GdK5s8OZDK47vC8x-9@mail.gmail.com - quasoft
2个回答

16
Select * from pg_stat_activity where state not ilike 'idle%' and query ilike 'insert%'

这将返回所有非空闲会话,其中查询以insert开头。如果您的查询未显示在此列表中,则它不再运行。

pg_stat_activity文档


1
最好使用ILIKE(特别是因为SQL约定使用大写关键字)。还要注意,不是所有用户都有权限查看与其他用户关联的查询列(它将显示为NULL),但OP仍然可以通过其remote_addr或类似方式识别其查询。 - Dave
@Dave,感谢您对ilike语法的纠正。在所有方面都非常正确,但是如果是这种情况,我相信可以要求DBA进行检查... - jkdba

3
你可以查看表格pg_stat_activity,其中包含所有数据库连接,包括活动查询、所有者等信息。
https://gist.github.com/rgreenjr/3637525上,有一个可复制的示例,演示了这样一个查询是如何工作的。

关于您计划使用计数器来跟踪当前状态的想法:根据您的隔离级别,在将数据提交到数据库之前,甚至可能无法查看插入的数据。 - Martin Prebio
1
在提交之前,不可能查看插入的数据(来自不同的事务)。Postgres 不允许脏读取。 - user330315

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接