当无法立即锁定所选行时,PostgreSQL`FOR UPDATE NOWAIT` 究竟返回了什么错误?

Bas*_*que 9 postgresql select locking

所述的PostgreSQL 9.4文档指出添加NOWAIT选项将SELECT FOR UPDATE当行不能被锁定时产生一个错误的装置:

要防止操作等待其他事务提交,请使用 NOWAIT 选项。使用 NOWAIT,如果无法立即锁定所选行,该语句将报告错误,而不是等待。

那究竟是什么错误?

由于这是一个可接受的条件,我希望我的 Java 代码检查此类预期错误,然后解决它。

Bas*_*que 8

SQL状态: 55P03

在 Postgres 9.4.x 中,我通过SELECT FOR UPDATE在 pgAdmin 中执行一个 unresolved然后SELECT FOR UPDATE NOWAIT在我的 Java 应用程序中执行一个来测试这个。我使用了 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
  • SQL状态:
    55P03
  • 条件名称:
    lock_not_available