1

必须执行的查询很简单,如下所示 -

Update employee set is_done=true; 

我要更新的表只存在于另一个数据库中。

我一直在使用这些类型的 dblink 查询。

INSERT Into mytable select * from 
dblink('host=10.1.1.1
 user=user
 password=password
 dbname=oat', 'SELECT * from employee') tt(
     user_id integer,
     is_done boolean

 ) on conflict(user_id) do nothing;

如何更新另一个数据库上的员工表字段?

我还想知道我们是否也可以以类似的方式实现删除 - 删除给定 id 的整行

另外,如果我必须在更新查询中与当前数据库表进行联接怎么办?

4

2 回答 2

2
SELECT dblink_connect('host=10.1.1.1
 user=user
 password=password
 dbname=oat');

SELECT dblink_exec('Update employee set is_done=true');

我也建议您使用 FDW,尤其是如果您使用的是 9.6

更新

对于dblink,您“包装” qry 并发送它。所以“加入”包装查询的唯一方法是DO块中的动态 SQL。这将是非常丑陋的。Concider 创建FOREIGN TABLE- 它可以让您轻松地从本地表更新

更新二

https://www.postgresql.org/docs/current/static/sql-createserver.html https://www.postgresql.org/docs/current/static/sql-createusermapping.html https://www.postgresql。 org/docs/current/static/sql-createforeigntable.html

所以你创建服务器,映射用户并创建一个外部表。

完成更新后,就好像它是本地的一样

于 2016-11-18T10:33:17.583 回答
1

这对我有用。

 select * from dblink('host=10.1.1.1
     user=user
     password=password
     dbname=oat','Update employee set is_done =true' ) tt(
     updated text);
于 2016-11-18T10:32:41.213 回答