使用dblink的2个数据库之间的更新无法正常工作(Update between 2 databas

2019-10-19 03:54发布

基本上我有各自含有2和表2级的数据库。 我需要更新数据库1使用表数据库2什么的。

下面是数据库1表2(DB1 TA2)

pid  |   pname  |  pcompany  |  clocation  |  did  |   name
 1       Pirates    Argos        London        1       Mary

数据库2表1(DB1 TB1)

pid  |   pname        |  pcompany  |
 1       Ba Ba Black      Argos       

现在我需要更新“捌捌黑”海盗意味着我需要更新从DB1 TA2 DB2 TB1。

UPDATE tb1 
SET name = ta1.name
WHERE ta1.name = (SELECT ta1.name FROM dblink('port=5432, dbname=db1 user=postgres  password=12345',
'SELECT name FROM ta1'))
AS t1 (a integer, b character(20), c integer)
WHERE pid = 1;

但我有此错误:

 ERROR: syntax error at or near "AS" LINE 5: AS t1 (a integer, b character(20), c integer) 

任何想法,我可能会被搞乱?

Answer 1:

添加表/列的别名和(最有可能),WHERE条件是这样的:

UPDATE tb1 b
SET    name = a.pname   -- maybe you want to update *pname* instead?
FROM  (
   SELECT *
   FROM   dblink('port=5432 dbname=db1 user=postgres  password=12345'
               , 'SELECT pname FROM ta1 WHERE pid = 1')
          AS t(pname text)
   ) a
WHERE b.pid = 1;

假设类型text 。 适应你的实际类型。
而在没有逗号 连接字符串 。
我不是一个链接到b ,因为a在这里返回单行。



Answer 2:

我的工作方式如下:

DO$$
DECLARE
 sql_statement TEXT;
BEGIN
 sql_statement:='UPDATE public.ta2 SET name='''||NEW.name||''' WHERE pid=1;';
PERFORM public.dblink('port=5432 dbname=db1 user=postgres  password=*',sql_statement);
RETURN NEW;
END;
$$
languaje plpgsql;

您可以参考以下链接: https://www.postgresql.org/docs/9.2/static/plpgsql-trigger.html



文章来源: Update between 2 databases using dblink not working