在本地数据库中,根据本地数据库中的表数据,更新远程数据库中的表数据,请问如何写?
如:
本地表:table_a,远程表 table_b 更新条件 table_a.name = table_b.name
更新字段:table_b.age = table_a.age
如:
本地表:table_a,远程表 table_b 更新条件 table_a.name = table_b.name
更新字段:table_b.age = table_a.age
update (SELECT * FROM dblink('myconn','SELECT * FROM table_b') AS t(a int, b text)) a
set a.age=b.age from table_a a where b.age = a.age
是有结果的,但是
出错了
ERROR: syntax error at or near "("
LINE 2: update (
^
2,执行第二步:
update
(
select username,age from dblink('select username,age from table_b') as t(username varchar(60),age int)
) b
set b.age = a.age from table_a a where b.username = a.username ;这样在执行第二卡时,报错了
ERROR: syntax error at or near "("
LINE 2: update (
^是不是这种写法有问题啊????
UPDATE table_a a1 SET age=t1.age
FROM (SELECT * FROM dblink('myconn','SELECT * FROM table_b') AS t(a int, b text)) as t1 WHERE a1.name=t1.name
where b.age = a.age 类似这样效果的写法table_a(本地表) 谢谢,
测试 了一下,只能用远程表替换本地表,替换远程表要用DBLINK_EXEC
准备使用的连接名;省略此参数则使用匿名连接 连接字串
一个连接信息串,如前面 dblink_connect 里描述的一样。 sql
你希望在远端数据库里执行的SQL命令,比如 insert into foo values(0,'a','{"a0","b0","c0"}'). fail_on_error
如果为真(省略时的缺省),那么在远端连接抛出的错误也会在本地抛出。如果为假,那么远端的错误会在本地报告为一个 NOTICE,而函数的返回值会设置为 ERROR。 返回值 返回状态要么是命令的状态字串,要么是 ERROR。 例子 select dblink_connect('dbname=dblink_test_slave');
dblink_connect
----------------
OK
(1 row)
select dblink_exec('insert into foo values(21,''z'',''{"a0","b0","c0"}'');');
dblink_exec
-----------------
INSERT 943366 1
(1 row)
select dblink_connect('myconn', 'dbname=regression');
dblink_connect
----------------
OK
(1 row)
select dblink_exec('myconn', 'insert into foo values(21,''z'',''{"a0","b0","c0"}'');');
dblink_exec
------------------
INSERT 6432584 1
(1 row)
select dblink_exec('myconn', 'insert into pg_class values (''foo'')',false);
NOTICE: sql error
DETAIL: ERROR: null value in column "relnamespace" violates not-null constraint
dblink_exec
-------------
ERROR
(1 row)
我现在想将本地的一个表(假设 table_a)数据全部插入到远程的一个表(table_b)中
table_a,table_b 表结构完全一致,请问在本地数据库中,怎么写啊 ???--表结构如下
create table table_a
(
name character varying(30),
age int
)