Как использовать (установить) dblink в PostgreSQL? - PullRequest
53 голосов
/ 05 октября 2010

Я привык к Oracle и для создания dblink в моей схеме, а затем доступа к удаленной базе данных следующим образом: mytable@myremotedb, есть ли в любом случае то же самое с PostgreSQL?

Сейчас я использую dblink следующим образом:

SELECT logindate FROM dblink('host=dev.toto.com
                              user=toto
                              password=isok
                              dbname=totofamily', 'SELECT logindate FROM loginlog');

Когда я выполняю эту команду, я получаю следующую ошибку:

СОВЕТ: ни одна функция не соответствует заданному имени и типу аргумента. Возможно, вам придется добавить явные приведения типов.

У кого-нибудь есть идея? Нужно ли «активировать» dblinks или что-то делать перед их использованием?

Что-нибудь нужно сделать с удаленной базой данных, которую мы собираемся запросить? Нужно ли активировать dblink тоже? Я продолжаю иметь could not establish connection. Это строка типа:

SELECT dblink_connect_u('host=x.x.x.x dbname=mydb user=root port=5432');

IP-адрес правильный, и Postgres работает на удаленном сервере. Есть идеи?

Ответы [ 6 ]

106 голосов
/ 07 ноября 2012

С PostgreSQL 9.1 или новее установка дополнительных модулей упрощена. Зарегистрированные расширения (включая dblink) можно установить с CREATE EXTENSION:

CREATE EXTENSION dblink;

Устанавливается в схему по умолчанию (public по умолчанию). Убедитесь, что ваш search_path настроен правильно перед запуском команды, и схема видна всем пользователям, которые должны с ней работать.

Кроме того, вы можете установить любую схему по вашему выбору с помощью:

CREATE EXTENSION dblink SCHEMA extensions;

См:

Запускать один раз для каждой базы данных. Или запустите его в стандартной системной базе данных template1, чтобы автоматически добавить его в каждую вновь созданную БД. Подробности в руководстве.

Сначала необходимо установить файлы, обеспечивающие модуль, установленный на сервере. Для Debian и его производных это будет пакет postgresql-contrib-9.1 - для PostgreSQL 9.1, очевидно.

22 голосов
/ 23 октября 2015

Я использую DBLINK для подключения внутренней базы данных для кросс-запросов к базе данных.

Ссылка взята из этой статьи.

Установить расширение DbLink.

CREATE EXTENSION dblink;

Проверить DbLink:

SELECT pg_namespace.nspname, pg_proc.proname 
FROM pg_proc, pg_namespace 
WHERE pg_proc.pronamespace=pg_namespace.oid 
   AND pg_proc.proname LIKE '%dblink%';

Проверка подключения базы данных:

SELECT dblink_connect('host=localhost user=postgres password=enjoy dbname=postgres');
12 голосов
/ 03 марта 2011

В linux найдите dblink.sql, затем выполните в консоли postgresql что-то вроде этого, чтобы создать все необходимые функции:

\i /usr/share/postgresql/8.4/contrib/dblink.sql 

вам может понадобиться установить пакеты contrib: sudo apt-get install postgresql-contrib

4 голосов
/ 05 октября 2010

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

Предполагается, что Linux-подобная ОС

find / -name dblink.sql

Проверьте местоположение и запустите его

2 голосов
/ 09 октября 2014

Может быть добавлено с помощью:

$psql -d databaseName -c "CREATE EXTENSION dblink"
0 голосов
/ 28 июля 2017
# or even faster copy paste answer if you have sudo on the host 
sudo su - postgres  -c "psql template1 -c 'CREATE EXTENSION IF NOT EXISTS \"dblink\";'"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...