2017-02-09 14 views
3

システムクラッシュ後、PostgreSQLデータベースに行がロックされています。postgresql stale lockを削除する

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

[OK]を、溶液:

  1. select * from pg_prepared_xacts where transaction = 40060;
  2. によってトランザクション(上記の場合、すなわち40060)にGIDがひどい長いGIDを探します。
  3. ROLLBACK PREPARED gid;

これは、ロックを解除します。

関連する問題