• 締切済み

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表示する処理を行いました。 よろしくお願いします。

みんなの回答

  • gacky-79
  • ベストアンサー率100% (14/14)
回答No.1

EXCLUSIVE MODE のロックと SELECT は競合しません。Oracleと同じ動作です。 「Webアプリのselect」が、更新処理や FOR SHARE/UPDATE 等、 select以外の処理を勝手に追加していませんか?

参考URL:
http://www.postgresql.jp/document/current/html/explicit-locking.html#LOCKING-TABLES
AngeMoco
質問者

補足

有難うございます。 私も参考URLを見て、うまくいくはずと思ったのですが、実際にはトランザクション終了待ちになってしまい、ダメでした。 Webアプリは selectした内容を表に表示しているだけで 更新や FOR SHARE/UPDATE などは行っていないのですが。。。

関連するQ&A