若需要終止特定的SQL或會話來恢複系統狀態,先通過pg_stat_activity
系統檢視表查詢當前的查詢:
select current_query,procpid from pg_stat_activity ;
current_query | procpid
-----------------------------------------------------+---------
select current_query,procpid from pg_stat_activity; | 32584
SELECT xxx | 32238
說明
current_query
為當前進行中的查詢,procpid
為後台進程的PID。
終止非當前串連的SELECT:
SELECT pg_cancel_backend(pg_stat_activity.procpid)
FROM pg_stat_activity
WHERE procpid <> pg_backend_pid() and current_query like 'SELECT%';--注意SELECT的大小寫
pg_cancel_backend
-------------------
t
(1 rows)
或
SELECT pg_terminate_backend(pg_stat_activity.procpid)
FROM pg_stat_activity
WHERE procpid <> pg_backend_pid() and current_query like 'SELECT%'; --注意SELECT的大小寫
pg_terminate_backend
-------------------
t
(1 rows)
說明
cancel
和terminate
僅適用於目前使用者的查詢或許可權小於等於目前使用者的查詢。若提示"ERROR: must be superuser or rds_superuser to signal other server processes"
,則說明後台有其他使用者的串連,但不影響cancel
和terminate
的執行。