2016-02-28 131 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不允許髒讀。 –