【问题标题】:How can you do an update to a table in another database using postgres dblink?如何使用 postgres dblink 更新另一个数据库中的表?
【发布时间】:2017-04-02 03:35:59
【问题描述】:

必须执行的查询如下所示 -

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 的整行

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

【问题讨论】:

  • 外来数据包装器会是更好的解决方案
  • @a_horse_with_no_name 能否举个例子,谢谢
  • 这对我有用。 select * from dblink('host=10.1.1.1 user=user password=password dbname=oat','Update employee set is_done =true') tt(updated text);

标签: sql postgresql dblink postgres-fdw


【解决方案1】:
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

因此您创建服务器、映射用户并创建外部表。

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

【讨论】:

  • 谢谢。我想这也可以。您是否还可以编辑我关于加入的描述中最后一个问题的答案
  • 好吧,9.6 将允许您进行远程连接。关于你的最后一个问题 - 你的意思是你想用 CTE 加入更新吗?..
  • 我不知道什么是 CTE 连接。它是远程员工表中的 user_id 和本地表的 id 之间的简单连接
  • 你绝对可以用外表来做到这一点。和 dblink... 到目前为止,我在 DO 块中只看到动态 sql...
  • 我想到了 CTE,因为你提到了加入更新。postgresql.org/docs/current/static/queries-with.html 但你可能是指update .. from dblink_table ... join local_table
【解决方案2】:

这对我有用。

 select * from dblink('host=10.1.1.1
     user=user
     password=password
     dbname=oat','Update employee set is_done =true' ) tt(
     updated text);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-13
    • 1970-01-01
    • 2012-10-16
    • 1970-01-01
    • 2012-06-03
    • 1970-01-01
    相关资源
    最近更新 更多