基本上我有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
现在我需要将'Ba Ba Black'更新为Pirates,这意味着我需要从 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)
知道我可能搞砸了什么吗?
答案 0 :(得分:2)
添加表/列别名和(很可能)像这样的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
。适应您的实际类型。
connection string中没有逗号
我没有链接到b
,因为a
在这里返回一行。
答案 1 :(得分:0)
我的工作方式如下:
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