postgres db_link_build_sql_insert如何工作?

时间:2016-01-13 21:56:54

标签: postgresql dblink

我似乎无法弄清楚这个函数如何用于将数据从本地数据库中的一个表推送到另一个表上的另一个表。我查看了文档但仍然不理解给出的示例。我正在使用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);

1 个答案:

答案 0 :(得分:0)

来自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)