PostgreSQLでdeadlock detectedが出るんだけど

追記(2009.12)
結論から言って、LudiaはPostgreSQL8.1はダメです。8.2にしましょう

  • -


PostgreSQL + Ludia1.5.0で N-gram検索」の環境で、UPDATEした時のエラーなんだけど(;´Д`)

deadlock detected
Detail:
Process 15745 waits for AccessExclusiveLock on relation 18220 of database 17401; blocked by process 16883.
Process 16883 waits for AccessShareLock on relation 18216 of database 17401; blocked by process 15745.

relation 18220とrelation 18216は、fulltextbのngramインデックス
process 15745は、UPDATEしてたプロセス
process 16883は、かち合っちゃったSELECT検索のプロセス
前はこんな風じゃなかった気がしたんだけど、インデックス消して作り直しても変わらずエラーが出る。直らない
SELECT検索は
"AccessShareLock"
で、UPDATEでは
"AccessShareLock"
"RowExclusiveLock"
"AccessExclusiveLock"
がかかってて、
普通のインデックスには"RowExclusiveLock"なんだけど、ngramインデックスには"AccessExclusiveLock"がかかる状況
SELECTとUPDATEが競合するのは、この"AccessExclusiveLock"のせいだと思うんだけど(;´Д`)
UPDATEなら"AccessExclusiveLock"じゃなくて、"RowExclusiveLock"で十分なんじゃないのかな

Ludiaの開発中に、以下のエラーログに当たりました。

PostgreSQLのロック制御 - Ludia開発日記

Ludia開発日記におんなじエラーが載ってるんだけどね
解決しないんだけど(;´Д`)
まあ、微妙に違うっちゃ違うんだけど(;´Д`)(;´Д`)(;´Д`)