2017-02-09 105 views
3

系統崩潰後,我的Postgresql數據庫確實對行有鎖定。postgresql刪除陳舊的鎖

pg_locks表包含很多沒有pid的行。即

select locktype,database,relation,virtualtransaction, pid,mode,granted from pg_locks p1;

locktype | database | relation | virtualtransaction | pid |  mode  | granted 
---------------+----------+----------+--------------------+-------+------------------+--------- 
relation  | 16408 | 31459 | -1/40059   |  | AccessShareLock | t 
relation  | 16408 | 31459 | -1/40059   |  | RowExclusiveLock | t 
relation  | 16408 | 31022 | -1/40060   |  | AccessShareLock | t 
transactionid |   |   | -1/40060   |  | ExclusiveLock | t 
relation  | 16408 | 31485 | -1/40060   |  | AccessShareLock | t 

如何獲得交易40060死亡,鎖去掉?

+0

好的,我找到了問題的解決方案: –

回答

3

好的,由自己發現溶液:

  1. 通過select * from pg_prepared_xacts where transaction = 40060;
  2. 查找GID到事務(即在上面的情況下,40060)找到一個可怕的長GID。
  3. ROLLBACK PREPARED gid;

這將清除鎖。