Как добавить удаленную базу данных Postgresql (связанный сервер) в базу данных Postgresql?

#postgresql #postgresql-10

#postgresql #postgresql-10

Вопрос:

У меня есть база данных postgresql дома и одна в облаке. Я хотел бы добавить свою домашнюю базу данных в облачную базу данных, чтобы я мог легко выполнять запросы между базами данных. Как это можно сделать? Без использования dblink http://www.postgresonline.com/journal/archives/44-Using-DbLink-to-access-other-PostgreSQL-Databases-and-Servers.html

Моя домашняя база данных будет использовать динамического поставщика ip (могу ли я добавить динамический IP-адрес, такой как myhomedb.dedyn.io в настройки postgresql?)

Я заявляю все это на случай возникновения каких-либо проблем. Моя домашняя база данных будет использоваться только для обновления огромного объема данных, но не является критически важной (как мы знаем, облачные вычисления недешевы).

Заранее спасибо.

Ответ №1:

Похоже, postgres-fdw это правильный путь: https://www.postgresql.org/docs/current/postgres-fdw.html

Сначала установите расширение:

 CREATE EXTENSION postgres_fdw;
  

Затем создайте внешний сервер с помощью CREATE SERVER . В этом примере мы
хотите подключиться к серверу PostgreSQL на хосте 192.83.123.89
прослушивание порта 5432 . База данных, к которой установлено соединение
имеет имя foreign_db на удаленном сервере:

 CREATE SERVER foreign_server
        FOREIGN DATA WRAPPER postgres_fdw
        OPTIONS (host '192.83.123.89', port '5432', dbname 'foreign_db');
  

Также необходимо сопоставление пользователя, определенное с помощью CREATE USER MAPPING
для определения роли, которая будет использоваться на удаленном сервере:

 CREATE USER MAPPING FOR local_user
        SERVER foreign_server
        OPTIONS (user 'foreign_user', password 'password');
  

Теперь можно создать внешнюю таблицу с CREATE FOREIGN
TABLE
. В этом примере мы хотим получить доступ к таблице с именем
some_schema.some_table на удаленном сервере. Локальное имя для нее
будет foreign_table :

 CREATE FOREIGN TABLE foreign_table (
        id integer NOT NULL,
        data text
)
        SERVER foreign_server
        OPTIONS (schema_name 'some_schema', table_name 'some_table');
  

Важно, чтобы типы данных и другие свойства столбцов
объявленные в CREATE FOREIGN TABLE соответствуют фактической удаленной таблице.
Имена столбцов также должны совпадать, если вы не добавите column_name параметры
к отдельным столбцам, чтобы показать, как они называются в удаленном
таблица. Во многих случаях использование IMPORT FOREIGN SCHEMA предпочтительнее, чем
создание определений внешних таблиц вручную.