2016-01-13 4 views
0

Я не могу понять, как эта функция должна работать для толкания данных через одну таблицу из вашей локальной базы данных в другую в отдельной базе данных. Я просмотрел документацию и до сих пор не понимаю приведенный пример. Я работаю с postgres 9.2, который позволяет использовать dblink.Как работает postgres db_link_build_sql_insert?

Вот пример кода, в котором я создаю тестовую базу данных и выталкивая значения из моей локальной таблицы в таблицу тестовой базы данных. Может кто-то заполнить недостающую часть функции 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); 

ответ

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 указано, поэтому я предполагаю, что на (а), что автоматически означает, что primary_key_attnums = 1 (PK в первом столбце) и num_primary_key_atts=1 (один столбец PK). Два значения остаточного значения были сделаны для подготовки строки ro «replicate» с 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) 
Смежные вопросы