查詢是否鎖表了
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ù)庫(kù)用戶名';

上面查詢結(jié)果中:pid就是ACTIVITY的唯一標(biāo)識(shí),state就是活動(dòng)狀態(tài),query就是正在執(zhí)行的sql語(yǔ)句,query——start就是開始執(zhí)行的時(shí)間。
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ù)庫(kù)用戶名'
AND T.WAIT_EVENT_TYPE = 'Lock';
3.將第二條查詢語(yǔ)句的pid字段的數(shù)字值記錄下來(lái),執(zhí)行下面的查詢語(yǔ)句可以解鎖:
-- 通過pid解鎖對(duì)應(yīng)的ACTIVITY
select PG_CANCEL_BACKEND('6984');
上面的查詢語(yǔ)句,執(zhí)行了pg_cancel_backend()函數(shù),該函數(shù)是取消后臺(tái)操作,回滾未提交事物的用途。
4.解決idle in transaction
select pg_terminate_backend ('21967')
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教。
您可能感興趣的文章:- PostgreSQL 實(shí)現(xiàn)登錄及修改密碼操作
- postgresql表死鎖問題的排查方式
- Postgresql - 查看鎖表信息的實(shí)現(xiàn)
- 基于postgresql行級(jí)鎖for update測(cè)試
- Postgresql鎖機(jī)制詳解(表鎖和行鎖)
- postgresql查詢鎖表以及解除鎖表操作
- PostgreSQL中關(guān)閉死鎖進(jìn)程的方法
- PostgreSQL用戶登錄失敗自動(dòng)鎖定的處理方案