在本地数据库中,根据本地数据库中的表数据,更新远程数据库中的表数据,请问如何写?
如:
本地表:table_a,远程表 table_b  更新条件  table_a.name = table_b.name
    更新字段:table_b.age = table_a.age

解决方案 »

  1.   

    假设你已经建立好dblink
    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
      

  2.   

    SELECT * FROM dblink('myconn','SELECT * FROM table_b') AS t(a int, b text) 
       是有结果的,但是
    出错了
    ERROR:  syntax error at or near "("
    LINE 2: update (
                   ^
      

  3.   

    1, 第一步没问题  select * from dblink_connect('host=10.10.10.10 user=postgre password=postgre dbname=dbuser');
    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 (
      ^是不是这种写法有问题啊????
      

  4.   

    测试 了一下,只能用远程表替换本地表,替换远程表要用DBLINK_EXEC
    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
      

  5.   

    如果就是想在本地,通过本地表(table_A)更新远程表(table_b)里的数据,能给个写法吗,谢谢
      

  6.   

    我是意思是在本地操作:update table_b(远程表) set name = a.name from table_b b,table_a a 
        where b.age = a.age  类似这样效果的写法table_a(本地表)    谢谢,
      

  7.   

    4楼不是已经说过,不行
    测试 了一下,只能用远程表替换本地表,替换远程表要用DBLINK_EXEC
      

  8.   

    替换远程表要用DBLINK_EXEC    ??  能给个示例吗   谢谢 急,
      

  9.   

    dblink_exec 在远端数据库执行一条命令(任何不返回行的 SQL 语句)。 如果给出两个文本参数,那么第一个会当做永久连接名称来查找;如果找到,则在该连接执行命令。如果没有找到,则第一个参数会被当做给 dblink_connect 用的连接信息串,然后会为该执行命令进行一次短暂的连接。 参数 conname 
    准备使用的连接名;省略此参数则使用匿名连接 连接字串 
    一个连接信息串,如前面 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)
      

  10.   

    非常感谢,不过小弟还有点没有搞清楚,
      我现在想将本地的一个表(假设 table_a)数据全部插入到远程的一个表(table_b)中
         table_a,table_b 表结构完全一致,请问在本地数据库中,怎么写啊 ???--表结构如下
    create table table_a
    (
    name character varying(30),
    age int
    )