こんにちわ。開発エンジニアのsugimotoです。 今回はPostgresqlのデッドロックについてちょっと書いてみます。 確認した環境はPostgresql9.1.4です。 ロックとかデッドロックについての説明は省きます。 デッドロックの調査 カタログテーブルのpg_locksを確認すると現在のロック状態がわかります。 pg_classと結合すればテーブル名もわかります。 各ロックの競合関係図はhttp://www.ecoop.net/memo/archives/2008-05-30-1.htmlがわかりやすくてお勧めです。 デッドロックの例 自分が経験したことのあるデッドロックの例を3つほどあげます。 例1.明示的なロックによるデッドロック 一番普通のパターンです。 本にはこれが載っていることが多いです。 自分もつい2年くらい前まではデッドロックはこのパターンしかないと思ってました。
![そのデッドロック、知ってました?](https://cdn-ak-scissors.b.st-hatena.com/image/square/0f972206623124e662d5b838f1f9120be6013e0c/height=288;version=1;width=512/https%3A%2F%2Fblogger.googleusercontent.com%2Fimg%2Fb%2FR29vZ2xl%2FAVvXsEiVYCqYPN1djJP4Xnmg1ONdfOpHxygaG75LDLbei4heSP5ss3l3dTMIGaT7DEGnlWiFgL4AyAm0xdUOEopq4Y3iwiBPYGjAGyOlpBe86yyL1UKTot2pkkAJeA0gU5elcm8vclQw7ZIS9cA%2Fs640%2F2012-10-15-01.png)