【发布时间】:2014-06-22 12:48:09
【问题描述】:
我正在使用dblink 对远程数据库进行一些数据操作(插入、更新或删除)。具体来说,我正在使用视图和视图规则来执行插入、更新或删除。例如:
-- SQL
-- Note: get_remote_db() is a function returning the connection string
CREATE VIEW remote_table AS
SELECT * FROM dblink(get_remote_db(), 'SELECT id, name FROM example_table')
AS rec(id NUMERIC, name VARCHAR);
CREATE RULE remote_table_update AS
ON UPDATE TO remote_table DO INSTEAD
SELECT dblink_exec(
get_remote_db(),
concat('UPDATE example_table SET name = ', quote_nullable(NEW.name),
' WHERE id = ', quote_nullable(OLD.id)),
true);
// Java
String SQL = "UPDATE remote_table SET name = 'John' WHERE id = 23";
int iRowsAffected = statement.executeUpdate(SQL);
if (iRowsAffected > 0) {
System.out.println("Rows affected: " + iRowsAffected);
} else {
System.out.println("No rows affected!");
}
我发现在使用dblink_exec时,受影响的行数始终为零,即使在远程数据库中,某些行(多于零)也会受到影响。
有什么解决方法吗?我的应用程序的某些部分取决于受影响的行数。如果数字始终为零,则应用程序将无法按预期工作。
澄清: Java 代码中的更新语句激活规则并正确执行更新。那里没有问题。问题在于 iRowsAffected 的值,即使更新了一行,它也始终为零。
【问题讨论】:
标签: java postgresql postgresql-9.1 sql-view dblink