PostgreSQL 杀会话
pg_stat_activity 視圖的每一行與每一個服務(wù)器進程一一對應(yīng),顯示與該進程當(dāng)前活動相關(guān)的信息。
pg_cancel_backend和pg_terminate_backend服務(wù)器信號函數(shù)
pg_cancel_backend(pid ? int): 取消一個后端的當(dāng)前查詢。如果調(diào)用角色是被取消后端的擁有者角色的成員或者調(diào)用角色已經(jīng)被授予pg_signal_backend,這也是允許的,不過只有超級用戶才能取消超級用戶的后端。?
pg_terminate_backend(pid int):
中止一個后端。如果調(diào)用角色是被取消后端的擁有者角色的成員或者調(diào)用角色已經(jīng)被授予pg_signal_backend,這也是允許的,不過只有超級用戶才能取消超級用戶的后端。
這兩個函數(shù)的區(qū)別在于:pg_cancel_backend 只是取消當(dāng)前某一個進程的查詢操作,但不能釋放數(shù)據(jù)庫連接。但pg_terminate_backend 可以在pg的后臺殺死這個進程,從而釋放出寶貴的連接資源。
?
-- 1) 當(dāng)前會話
postgres=# SELECT COUNT(*) FROM pg_stat_activity;count -------12 (1 row)postgres=# SELECT datname,pid,state,backend_type FROM pg_stat_activity;datname | pid | state | backend_type -----------+-------+--------+------------------------------| 23635 | | logical replication launcher| 23633 | | autovacuum launcherpostgres | 63810 | active | client backendpostgres | 60710 | idle | client backendpostgres | 59702 | idle | client backendzoo | 59736 | idle | client backendsample_db | 59772 | idle | client backendzoo | 59972 | idle | client backendzoo | 60011 | idle | client backend| 23631 | | background writer| 23630 | | checkpointer-- 2) 用pg_cancel_backend函數(shù)殺會話(其中的pid為60011和59972)
?
-- 3) 用pg_terminate_backend函數(shù)殺掉會話,能殺掉
postgres=# SELECT datname,pid,state,backend_type FROM pg_stat_activity;datname | pid | state | backend_type -----------+-------+--------+------------------------------| 23635 | | logical replication launcher| 23633 | | autovacuum launcherpostgres | 63810 | active | client backendpostgres | 60710 | idle | client backendpostgres | 59702 | idle | client backendzoo | 59736 | idle | client backendsample_db | 59772 | idle | client backendzoo | 60011 | idle | client backend| 23631 | | background writer| 23630 | | checkpointer| 23632 | | walwriter (11 rows)postgres=# SELECT pg_terminate_backend(60011);pg_terminate_backend ----------------------t (1 row)postgres=# SELECT datname,pid,state,backend_type FROM pg_stat_activity;datname | pid | state | backend_type -----------+-------+--------+------------------------------| 23635 | | logical replication launcher| 23633 | | autovacuum launcherpostgres | 63810 | active | client backendpostgres | 60710 | idle | client backendpostgres | 59702 | idle | client backendzoo | 59736 | idle | client backendsample_db | 59772 | idle | client backend| 23631 | | background writer| 23630 | | checkpointer| 23632 | | walwriter (10 rows)----生成殺會話的語句
postgres=# SELECT 'SELECT pg_terminate_backend(' || PID || ');' KILL_PID, DATID, DATNAME, PID, USESYSID, USENAME, APPLICATION_NAME, CLIENT_ADDR, CLIENT_PORT, STATE, QUERY FROM PG_STAT_ACTIVITY WHERE state='idle' limit 1;kill_pid | datid | datname | pid | usesysid | usename | application_name | client_addr | client_port | state | query -------------------------------------+-------+---------+-------+----------+----------+--------------------------+---------------+-------------+-------+----------------------------------------------------------------------------------------------------------------------- ------------------------------------SELECT pg_terminate_backend(72715); | 16387 | zoo | 72715 | 10 | postgres | pgAdmin 4 - CONN:4188715 | 192.168.131.1 | 49588 | idle | SELECT oid, pg_catalog.format_type(oid, NULL) AS typname FROM pg_catalog.pg_type WHERE oid IN (25, 26, 19, 23, 26, 19,25, 869, 23, 25, 25) ORDER BY oid; (1 row)總結(jié)
以上是生活随笔為你收集整理的PostgreSQL 杀会话的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 工作总结随手记
- 下一篇: mysql杀掉sql语句,Mysql使用