【问题标题】:How does postgres db_link_build_sql_insert work?postgres db_link_build_sql_insert 是如何工作的?
【发布时间】:2016-01-13 21:56:53
【问题描述】:

我似乎无法弄清楚这个函数应该如何工作以将数据从本地数据库中的一个表推送到另一个数据库中的另一个表。我查看了文档,但仍然不理解给出的示例。我正在使用 postgres 9.2,这使得使用 dblink 成为可能。

这是一些示例代码,我在其中创建了一个测试数据库并将值从我的本地表推送到测试数据库上的表。有人可以补一下dblink_build_sql_insert函数的缺失部分吗?

--drop database if exists testdb;
--create database testdb;

drop table if exists t;
create table t ( a integer, b text);
insert into t values (1,'10'), (2,'10'), (3,'30'), (4,'30');
create extension if not exists dblink;


select dblink_connect('dbname=testdb');
select dblink('drop table if exists t;');
select dblink('create table t ( a integer, b text);');
select dblink_build_sql_insert('t', ????);
select * from dblink('select * from t;') as (a integer, b text);

【问题讨论】:

    标签: postgresql dblink


    【解决方案1】:

    来自docs

    概要

    dblink_build_sql_insert(text relname,
      int2vector primary_key_attnums,
      integer num_primary_key_atts,
      text[] src_pk_att_vals_array,
      text[] tgt_pk_att_vals_array) returns text
    

    您没有指定 PK,所以我假设它位于 (a) 上,这自动意味着 primary_key_attnums = 1(第一列上的 PK)和 num_primary_key_atts=1(一列 PK)。两个剩余值相同,以按原样准备语句 ro“复制”行,a=1:

    b=# select dblink_build_sql_insert('t',
         '1'::int2vector,
          1::int2,  -- num of pkey values
          '{1}'::text[], -- old pkey
         '{1}'::text[] -- new pkey
    )
    ;
           dblink_build_sql_insert
    -------------------------------------
     INSERT INTO t(a,b) VALUES('1','10')
    (1 row)
    b=# select dblink($$INSERT INTO t(a,b) VALUES('1','10')$$);
         dblink
    ----------------
     ("INSERT 0 1")
    (1 row)
    
    b=# select * from dblink('select * from t;') as (a integer, b text);
     a | b
    ---+----
     1 | 10
    (1 row)
    
    b=# select dblink_disconnect();
     dblink_disconnect
    -------------------
     OK
    (1 row)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-04-08
      • 2022-12-20
      • 2012-11-22
      • 1970-01-01
      • 2015-02-12
      • 2013-07-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多