有沒有辦法強制客戶端與PostgreSQL斷開連接?我正在尋找相當於DB2的force application all
。使用PostgreSQL強制客戶端斷開連接
我想在我的開發盒上這樣做,因爲當我打開數據庫控制檯時,無法加載數據庫轉儲。我必須先退出他們。
有沒有辦法強制客戶端與PostgreSQL斷開連接?我正在尋找相當於DB2的force application all
。使用PostgreSQL強制客戶端斷開連接
我想在我的開發盒上這樣做,因爲當我打開數據庫控制檯時,無法加載數據庫轉儲。我必須先退出他們。
Combine pg_terminate_backend
功能和pg_stat_activity
系統視圖。在PostgreSQL的8.4
我在郵件列表中發現了this thread。它建議使用SIGTERM來導致客戶端斷開連接。
不如db2 force application all
乾淨。
殺敵空閒進程:
SELECT procpid, (SELECT pg_terminate_backend(procpid)) as killed from pg_stat_activity
WHERE current_query LIKE '<IDLE>';
像Postgres v9.1.4中的魅力一樣工作。感謝您的見解! – 2012-08-24 02:51:53
大概然後更重手的方法應該是使用,但:
for x in `ps -eF | grep -E "postgres.*idle"| awk '{print $2}'`;do kill $x; done
This SO answer精美的解釋(從araqnid全報價水平規則之間,然後我再次):
T Ø標記數據庫「applogs」不接受新的連接:
update pg_database set datallowconn = false where datname = 'applogs';
另一種可能性是,撤銷「連接」訪問數據庫中的客戶端角色(一個或多個)上。
將用戶從數據庫斷開=終止後端。所以,從「applogs」數據庫斷開所有其他用戶,例如:
select pg_terminate_backend(procpid)
from pg_stat_activity
where datname = 'applogs' and procpid <> pg_backend_pid();
一旦你完成了這兩個,你連接到「applogs」的唯一用戶。儘管在後端實際完成斷開連接之前實際上可能會有延遲?從MarkJL
更新:有確實是後臺完成斷開連接之前的延遲。
現在我再說一次:說到這裏,請記住,PostgreSQL 9.2及更高版本中的procpid
列已重命名爲pid
。
我認爲這是比米倫A.拉德夫回答這,雖然在技術上是相同的,不附帶使用示例和現實生活的建議更加有幫助。
我張貼我的答案,因爲我不能在我的腳本,服務器9.3使用其中的任何:
psql -U postgres -c "SELECT pid, (SELECT pg_terminate_backend(pid)) as killed from pg_stat_activity WHERE datname = 'my_database_to_alter';"
下一行,你可以做任何事情喲想「my_database_to_alter」。正如你所看到的,你可以從「postgres」數據庫執行查詢,該數據庫幾乎存在於每個postgresql安裝中。
做超級用戶和超出問題數據庫本身對我來說是完美的。
pg_cancel_backend()不斷開,它只取消當前查詢。接下來的查詢可以在任何時候使用仍然存在的舊連接。 – 2010-08-10 19:07:08
固定。謝謝! – 2010-08-10 20:20:15