Как использовать (установить) dblink в PostgreSQL?

Я привык к 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 работает на удаленном сервере. Любая идея?

7 ответов

В 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, очевидно.

Я использую 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');

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

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

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

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

Предполагая Linux-подобную ОС

find / -name dblink.sql

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

Его можно добавить с помощью:

$psql -d databaseName -c "CREATE EXTENSION dblink"
# 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\";'"

Вы спросите дополнительно, где установить ?

В большинстве случаев рекомендуемым местом для установки общих расширений Postgers является схема. Если вы устанавливаете расширения в pg_catalog, то все соответствующие функции доступны в любой схеме. Если вы устанавливаете расширение в , то внутри другой схемы вам также необходимо определить схему.

Например, если dblink установлен в , то в схеме вы должны определить схему.

      SELECT public.dblink_get_connections();

Например, если dblink установлен в , то по схемеmyschema, вам не нужно определятьpublicсхема:

      SELECT dblink_get_connections();

Все функции в схеме автоматически присоединяются к другим схемам.

Установитьdblinkвpg_catalog:

      CREATE EXTENSION IF NOT EXISTS dblink WITH SCHEMA pg_catalog;
Другие вопросы по тегам