web-dev-qa-db-ja.com

選択した行をすぐにロックできない場合、PostgreSQLの「FOR UPDATE NOWAIT」によって正確にどのようなエラーが返されますか?

PostgreSQL 9.4ドキュメント は、NOWAITオプションをSELECT FOR UPDATEに追加すると、行をロックできないときにエラーが生成されることを示しています。

操作が他のトランザクションのコミットを待機しないようにするには、NOWAITオプションを使用します。 NOWAITを使用すると、選択した行をすぐにロックできない場合、ステートメントは待機せずにエラーを報告します。

正確にはどのようなエラーになりますか?

これは許容できる条件なので、Javaコードでこのような予期されるエラーを確認し、回避する必要があります。

6
Basil Bourque

SQLState:55P03

Postgres 9.4.xでは、未解決のSELECT FOR UPDATEをpgAdminで実行し、次にSELECT FOR UPDATE NOWAIT in my Java app。私はJDBCドライバーを使用しましたJDBC41 Postgresql Driver, Version 9.4-1201

結果は次の PostgreSQLエラーコード でした。

  • メッセージ:
    ERROR: could not obtain lock on row in relation "my_table_"
  • クラス:
    Class 55 — Object Not In Prerequisite State
  • SQLState:
    55P03
  • 条件名:
    lock_not_available
4
Basil Bourque