Как использовать (установить) 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;