Скопируйте данные между двумя таблицами в PostgreSQL с помощью dblink.sql

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

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

cross database reference is not possible ...

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


person user1915182    schedule 10.02.2013    source источник
comment
возможный дубликат Как использовать (установить) dblink в postgresql?   -  person Erwin Brandstetter    schedule 10.02.2013


Ответы (1)


После того, как вы установили пакет в свою систему, , как описано в соответствующем вопросе установите расширение dblink в свою базу данных (ту, которую вы используете этот код в чужой БД не нужен):

CREATE EXTENSION dblink;

Вы можете найти примеры кода в руководстве.
Вот простая версия того, что я использую для копирования данных между базами данных: сначала создайте ИНОСТРАННЫЙ СЕРВЕР

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

В моем случае FOREIGN DATA WRAPPER postgresql был предварительно установлен.
Затем создайте функцию, которая открывает соединение, удаляет старые данные (опционально), извлекает новые данные, запускает 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;
person Erwin Brandstetter    schedule 10.02.2013