Java Dblink Insert Update Delete-受影响的行数始终为零

Java Dblink Insert Update Delete-受影响的行数始终为零,java,postgresql,postgresql-9.1,sql-view,dblink,Java,Postgresql,Postgresql 9.1,Sql View,Dblink,我使用dblink在远程数据库上执行一些数据操作,如插入、更新或删除。具体来说,我使用视图和视图上的规则来执行插入、更新或删除操作。例如: -SQL -注意:get_remote_db是一个返回连接字符串的函数 创建视图远程_表作为 从dblinkget\U remote\U db中选择*,“从示例表中选择id、名称” 作为recid NUMERIC,名称VARCHAR; 创建规则远程\u表\u更新为 更新到远程_表时改为执行 选择dblink\u exec 获取远程数据库, concat'UP

我使用dblink在远程数据库上执行一些数据操作,如插入、更新或删除。具体来说,我使用视图和视图上的规则来执行插入、更新或删除操作。例如:

-SQL -注意:get_remote_db是一个返回连接字符串的函数 创建视图远程_表作为 从dblinkget\U remote\U db中选择*,“从示例表中选择id、名称” 作为recid NUMERIC,名称VARCHAR; 创建规则远程\u表\u更新为 更新到远程_表时改为执行 选择dblink\u exec 获取远程数据库, concat'UPDATE example_table SET name=',quote_nullableNEW.name, “WHERE id=”,引号_nullablelold.id, 符合事实的 //爪哇 字符串SQL=UPDATE remote_表集名称='John',其中id=23; int IRowsInfected=statement.executeUpdateSQL; 如果受影响>0{ System.out.printlnRows受影响:+IROWS受影响; }否则{ System.out.println没有受影响的行!; } 我发现,当使用dblink_exec时,受影响的行数始终为零,即使在远程数据库中,一些超过零的行也会受到影响

有什么解决办法吗?我的应用程序的某些部分取决于受影响的行数。如果数字始终为零,则应用程序将无法按预期工作


澄清:Java代码中的update语句激活规则并正确执行更新。没有问题。问题在于IRowsInfected的值,即使行已更新,该值始终为零。

您的视图似乎并不简单,因此无法更新

简单视图是可自动更新的:系统将允许在视图上使用INSERT、UPDATE和DELETE语句,方式与在常规表上相同。如果视图满足以下所有条件,则该视图将自动更新:

视图的“发件人”列表中必须只有一个条目,该条目必须是表或其他可更新视图

视图定义的顶层不得包含WITH、DISTINCT、GROUP BY、HAVING、LIMIT或OFFSET子句

视图定义不得在顶层包含集合操作UNION、INTERSECT或EXCEPT

视图的选择列表中的所有列都必须是对基础关系列的简单引用。它们不能是表达式、文字或函数。系统列也不能被引用

基础关系的任何列都不能在视图的选择列表中出现多次

视图不得具有security_barrier属性


在PostgreSQL中,这是一个更好的选择。

视图是可更新的。我在问题中提到正在进行一些改变。问题不是我不能更新视图-我可以。问题是受影响的行数始终返回为零,这是不正确的。所以你的答案并没有回答我的问题。另外,使用的数据库是9.1,其中简单视图是不可更新的。可更新视图仅在9.3中介绍。你笼统地说任何不简单的视图都是不可更新的,这也是错误的。复杂视图不能自动更新,但可以使用触发器或规则手动更新,如果您注意到,我使用了一个规则。最后,我不知道CTE在这里应该有什么帮助——它们似乎与手头的问题完全无关。