我目前正在使用带有 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/