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

标签 postgresql

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

我有以下使用“SELECT...FOR UPDATE OF...”子句的 JDBC SQL,它检索列值(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;

所有其他数据库,例如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

我确实有正确创建“”列的表“sequence”——所以这可能不是臭名昭著的区分大小写问题。

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

非常感谢,

最佳答案

是的。它是受支持的。但是语法是

更新 [ OF table_name [, ...] ] [ NOWAIT ]

你可以在这里看到更多:

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

关于postgresql - PostgreSQL 是否支持 "SELECT... FOR UPDATE OF..."SQL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6852955/

相关文章:

postgresql - 如何在 PostgreSQL 数据库中找到靠在一起的点?

java - PSQL异常 : this ResultSet is closed

database - 将普通 Postgres 数据库转换为 PostGis 数据库

sql - 将 NULL 值排序到表的末尾

postgresql - 启用 PostgreSQL 远程访问 - 似乎没有任何效果

java - Hibernate @Formula 导致 org.hibernate.HibernateException : Missing column

function - 将表名和列名定义为 plpgsql 函数中的参数?

sql - 在 postgresql 中使用具有较低功能的索引

python - 服务器抛出异常而不是显示 "database does not exist"

postgresql - Symfony DQL Postgresql 组不工作