POSTGRES - Как создать запрос на выборку, который объединит две базы данных? - PullRequest
2 голосов
/ 29 февраля 2012

У меня проблема с базой данных join 2. Сначала .. Я попытался использовать этот запрос:

   SELECT * 
     FROM my_db1.table1 tb1 
LEFT JOIN my_db2.table2 tb2 ON tb2.code = tb1.code

Я получаю следующую ошибку:

схема "my_db2" не существует.

Итак, я попробовал:

SELECT * 
  FROM dblink('my_db2', 'SELECT * FROM table2')

Но это все равно не работает.
Что я должен сделать, чтобы выбрать из двух таблиц, которые находятся в разных базах данных?

1 Ответ

3 голосов
/ 29 февраля 2012

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

SELECT * 
FROM   table1 tb1 
LEFT   JOIN (
   SELECT *
   FROM   dblink('dbname=db2','SELECT id, code FROM table2')
   AS     tb2(id int, code text);
   ) USING (code)

Отсутствуют две вещи: строка подключения и список определений столбцов.

Однако я бы инкапсулировал доступ к внешней таблице впредставление или табличная функция. Я цитирую руководство :

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...