PostgreSQL是否支持"SELECT ... FOR UPDATE OF ..."SQL?

jav*_*r71 4 postgresql

我目前正在使用带有JDBC驱动程序的" PostgreSQL 9.0.4 "数据库:" postgresql-9.0-801.jdbc4.jar ".

我有以下JDBC SQL使用" SELECT ... FOR UPDATE OF ... "子句检索列值(long)并通过在同一事务中递增来更新值.
我需要返回long值,因此我需要使用SELECT Sql.

final PreparedStatement preparedStatement = _connection.prepareStatement(
              "select value from sequence where table_name='JOB' for update of value",
                  ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_UPDATABLE);

 long ret;
 try {
      final ResultSet resultSet = preparedStatement.executeQuery();
      resultSet.next();
      ret = resultSet.getLong(1);
      resultSet.updateLong(1, ret + 1);
      resultSet.updateRow();
 } catch (SQLException ex) {
      ex.printStackTrace(); 
 } 
finally {
     resultSet.close();
     preparedStatement.close();
 }
 return ret;
Run Code Online (Sandbox Code Playgroud)

所有其他数据库,例如MySQL,Oracle,MS-SQL,Derby都可以正常使用这样的SQL - 但是PostgreSQL总是抛出异常.

     org.postgresql.util.PSQLException: ERROR: relation "value" in FOR UPDATE/SHARE clause not found in FROM clause
     Position: 68
Run Code Online (Sandbox Code Playgroud)

我确实有正确创建" "列的表" 序列 " - 所以这可能不是臭名昭着的区分大小写问题.

这是否意味着Postgres不支持"SELECT ... FOR UPDATE OF .." SQL语法?
在这种情况下,实现相同效果的最佳方式是什么(即使用相同的事务选择和更新)?

提前谢谢了,

Err*_*Efe 6

是.它受到支持.但语法是

FOR UPDATE [ OF table_name [, ...] ] [ NOWAIT ]

你可以在这里看到更多:

http://www.postgresql.org/docs/8.2/static/sql-select.html#SQL-FOR-UPDATE-SHARE