2013-02-10 3 views
3

Я использую PostgreSQL 9.1. Мне нужно перенести необходимые столбцы из одной таблицы из одной базы данных в другую таблицу другой базы данных, но не в схему.
Я обнаружил, что файл dblink.sql должен быть в share/contrib. Но моя папка contrib пуста. Где можно загрузить файл dblink.sql и выполнить мой запрос?Копирование данных между двумя таблицами в PostgreSQL с использованием dblink.sql

Когда я выполнить запрос теперь выдает сообщение об ошибке:

cross database reference is not possible ... 

Может кто-нибудь помочь мне, как передавать данные между двумя базами данных?

+0

возможно дубликат [Как использовать (установить) DBLink в PostgreSQL] (http://stackoverflow.com/questions/3862648/how-to-use-install-dblink-in-postgresql) –

ответ

5

После установки пакета в вашу систему as detailed in the related question установить extension dblink в вашу базу данных (тот, на котором выполняется этот код, иностранный дб не нужен):

CREATE EXTENSION dblink; 

Вы можете найти code examples in the manual ,
Вот простой вариант того, что я использую, чтобы копировать данные между DBS: Во-первых, create a FOREIGN SERVER

CREATE SERVER mydb 
FOREIGN DATA WRAPPER postgresql 
OPTIONS (hostaddr '111.111.111.111',port '5432',dbname 'mydb'); 

FOREIGN DATA WRAPPER postgresql был предварительно установлен в моем случае.
Затем создайте функцию, которая открывает соединение, удаляет старые данные (opotional), получает новые данные, запускает ANALYZE и закрывает соединение:

CREATE OR REPLACE FUNCTION f_tbl_sync() 
    RETURNS text AS 
$BODY$ 
SELECT dblink_connect('mydb'); -- USER MAPPING for postgres, PW in .pgpass 

TRUNCATE tbl; -- optional 

INSERT INTO tbl 
SELECT * FROM dblink(
    'SELECT tbl_id, x, y 
    FROM tbl 
    ORDER BY tbl_id') 
    AS b(
tbl_id int 
,x int 
,y int) 

ANALYZE tbl; 

SELECT dblink_disconnect(); 
$BODY$ 
    LANGUAGE sql VOLATILE; 
Смежные вопросы