- 締切済み
oracleからposgreへの移行時の「LOCK
Webアプリをoracleからpostgresqlに移行しています。 行き詰ってしまったので、どなたかアドバイスをお願いします! セッション1で LOCK TABLE abc IN EXCLUSIVE MODE としている状態で、セッション2で select処理をして内容表示する処理があるのですが posgreでは、トランザクションを終了しないと、セッション2は止まったままになってしまいます。 セッション1のトランザクションを終了すると、セッション2で正常に表示できるのですが。。。 oracleでは、selectがLOCK前の状態で結果を返してくれるので セッション2も正常に表示できています。 いろいろ調べて、selectはOKのようなMODEも試したのですが、 解決できませんでした。 該当テーブルはROW単位ではなく、全体でLOCKしないとダメなのです。 ※試した方法は、 psqlで該当テーブルを、IN EXCLUSIVE MODEでLOCKし、Webアプリで select表示する処理を行いました。 よろしくお願いします。
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- gacky-79
- ベストアンサー率100% (14/14)
回答No.1
EXCLUSIVE MODE のロックと SELECT は競合しません。Oracleと同じ動作です。 「Webアプリのselect」が、更新処理や FOR SHARE/UPDATE 等、 select以外の処理を勝手に追加していませんか?
補足
有難うございます。 私も参考URLを見て、うまくいくはずと思ったのですが、実際にはトランザクション終了待ちになってしまい、ダメでした。 Webアプリは selectした内容を表に表示しているだけで 更新や FOR SHARE/UPDATE などは行っていないのですが。。。