查詢是否鎖表了
select oid from pg_class where relname='可能鎖表了的表'
select pid from pg_locks where relation='上面查出的oid'
如果查詢到了結(jié)果,表示該表被鎖 則需要釋放鎖定
select pg_cancel_backend(上面查到的pid)
補(bǔ)充:PostgreSQL 解決鎖表、死鎖問題
1.-- 查詢ACTIVITY的狀態(tài)等信息
SELECT T
.PID,
T.STATE,
T.QUERY,
T.WAIT_EVENT_TYPE,
T.WAIT_EVENT,
T.QUERY_START
FROM
PG_STAT_ACTIVITY T
WHERE
T.DATNAME = '數(shù)據(jù)庫用戶名';
上面查詢結(jié)果中:pid就是ACTIVITY的唯一標(biāo)識,state就是活動狀態(tài),query就是正在執(zhí)行的sql語句,query——start就是開始執(zhí)行的時間。
2.-- 查詢死鎖的ACTIVITY
SELECT T
.PID,
T.STATE,
T.QUERY,
T.WAIT_EVENT_TYPE,
T.WAIT_EVENT,
T.QUERY_START
FROM
PG_STAT_ACTIVITY T
WHERE
T.DATNAME = '數(shù)據(jù)庫用戶名'
AND T.WAIT_EVENT_TYPE = 'Lock';
3.將第二條查詢語句的pid字段的數(shù)字值記錄下來,執(zhí)行下面的查詢語句可以解鎖:
-- 通過pid解鎖對應(yīng)的ACTIVITY
select PG_CANCEL_BACKEND('6984');
上面的查詢語句,執(zhí)行了pg_cancel_backend()函數(shù),該函數(shù)是取消后臺操作,回滾未提交事物的用途。
4.解決idle in transaction
select pg_terminate_backend ('21967')
以上為個人經(jīng)驗(yàn),希望能給大家一個參考,也希望大家多多支持腳本之家。如有錯誤或未考慮完全的地方,望不吝賜教。
您可能感興趣的文章:- PostgreSQL 實(shí)現(xiàn)登錄及修改密碼操作
- postgresql表死鎖問題的排查方式
- Postgresql - 查看鎖表信息的實(shí)現(xiàn)
- 基于postgresql行級鎖for update測試
- Postgresql鎖機(jī)制詳解(表鎖和行鎖)
- postgresql查詢鎖表以及解除鎖表操作
- PostgreSQL中關(guān)閉死鎖進(jìn)程的方法
- PostgreSQL用戶登錄失敗自動鎖定的處理方案