2016-02-28 130 views
3

在我的工作中,我需要在postgresql数据库中构建一个新的连接表,该连接表涉及在两个现有表上执行大量计算。这个过程应该需要很长时间,所以我在周五离开之前将它设置为在周末运行。现在,我想检查查询是否完成。Postgresql检查查询是否仍在运行

如何检查INSERT命令是否已完成,而不是在我运行它的计算机上? (不,我不知道它是多少行假设的补充。)

+1

检查和pg_stat_activity – Dave

+0

这是关于你的计数来跟踪当前状态的想法一个例子http://www.postgresql.org/message-id/[email protected] – quasoft

回答

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

这将返回该查询开始insert,如果您的查询没有显示在此列表则不再运行所有非空闲会话。

pg_stat_activity doc

+1

更好地使用ILIKE(特别是因为SQL约定是使用大写关键字)。另请注意,并非所有用户都有权查看与其他用户关联的查询列(它将显示为NULL),但OP仍可以通过其remote_addr或类似方式识别他们的查询。 – Dave

+0

@Dave,感谢'ilike'的语法修正。然而,对所有帐户都是如此,如果是这种情况,我相信DBA可能会被要求检查...... – jkdba

2

你可以看看它包含了所有的数据库连接,包括主动询问,老板等

https://gist.github.com/rgreenjr/3637525有表pg_stat_activity是一个可复制的例子,这样的查询可能是这样的。

+0

:根据您的[隔离级别](http://www.postgresql.org/docs/current/static/transaction-iso.html),您可能甚至无法在将数据提交到数据库之前查看插入的数据。 –

+0

在提交之前,它将永远不可能看到插入的数据(来自不同的事务)。 Postgres不允许脏读。 –