Запросить две разные базы данных postgres, хранящиеся на разных серверах

У меня есть две базы данных POSTGRES, хранящиеся на разных серверах.

Firstdb имеет версию 9.2 и хранится на сервере локальной сети, порт 5432.

Seconddb имеет версию 10 и хранится как локальный хост на моем ПК, порт 5432.

У меня есть доступ к ним обоим через pgAdmin4 версии 2.0.

Я хотел бы запустить запрос между этими двумя базами данных для сравнения данных.

Любые идеи о том, как это можно сделать?

Спасибо всем за ваше время.


person Koumarelas Ioannis    schedule 29.03.2018    source источник
comment
Используйте стороннюю оболочку данных   -  person a_horse_with_no_name    schedule 29.03.2018


Ответы (1)


Для выполнения федеративных запросов я чаще всего использую postgres_fdw, который создает стороннюю таблицу в базе данных-источнике. Довольно удобно, но есть свои оговорки при работе с соединениями.

Пример:

CREATE SERVER my_server FOREIGN DATA WRAPPER postgres_fdw OPTIONS (host 'target.host.com', port '5432', dbname 'targetdb');
CREATE USER MAPPING FOR postgres SERVER my_server OPTIONS (user 'postgres');

CREATE FOREIGN TABLE my_foreign_table (
  id INT,
  desc TEXT
)
SERVER my_server OPTIONS (schema_name 'public', table_name 'target_table');

ИЗМЕНИТЬ на основе комментариев:

Имейте в виду, что исходная база данных, как и любое другое приложение, нуждается в доступе к целевой базе данных, и это должно быть описано в pg_hba.conf:

host yourdb youruser 0.0.0.0 md5

Другой подход заключается в использовании dblink, который не создает внешнюю таблицу, но позволяет вам отправлять запросы непосредственно в целевую базу данных и извлекать наборы результатов так же, как если бы она была локальной.

person Jim Jones    schedule 29.03.2018