2010-10-05 4 views
39

Я привык к Oracle и создаю dblink в своей схеме, а затем обращаюсь к удаленной базе данных следующим образом: [email protected], есть ли в любом случае то же самое с PostgreSQL?Как использовать (установить) dblink в PostgreSQL?

Сейчас я использую DBLink так:

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

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

HINT: No function matches the given name and argument types. You might need to add explicit type casts.

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

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

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

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

ответ

15
+4

Ваш первый ссылка помог мне. Я не знал, что это часть участия, поэтому я не знал, что должен активировать ее. \ i /usr/share/postgresql/8.4/contrib/dblink.sql сделал трюк! Спасибо ! – Spredzy

+0

Действительно полезно, но будем надеяться, что ссылки никогда не умрут ... – Alfabravo

4

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

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

find/-name dblink.sql 

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

10

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

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

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

+0

С пакетом 'postgres-contrib-9.3',' dblink.sql' теперь 'dblink - 1.1.sql'. –

81

С PostgreSQL 9.1 или новее упрощена установка дополнительных модулей. Registered extensions (including dblink) может быть установлен с CREATE EXTENSION:

CREATE EXTENSION dblink; 

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

В качестве альтернативы, вы можете установить в любой схеме по вашему выбору с:

CREATE EXTENSION dblink SCHEMA extensions; 

См:

Выполнить один раз в базу данных.Или запустите его в стандартной системной базе данных template1, чтобы добавить ее в каждые только что созданной БД. Details in the manual.

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

+0

Ничего не так просто с PostgreSQL ... Ошибка "/usr/share/postgresql/9.1/extension/dblink.control": Файл ou directory не найден ... Есть простая команда, чтобы исправить это? –

+0

... Идем на другом сервере с современным pg9.3 (на Debian). SQL-сообщение: «ERROR: не удалось открыть файл управления расширением» /usr/share/postgresql/9.3/extension/dblink.control ': Нет такого файла или каталога " –

+0

@PeterKrauss: Вы установили пакет Contrib как рекомендуется? pg 9.3 не находится в текущем стабильном выпуске (wheezy). Вы получаете его из ** [PostgreSQL Apt Repository] (http://www.postgresql.org/download/linux/debian/) **. –

1

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

$psql -d databaseName -c "CREATE EXTENSION dblink" 
11

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

Reference taken from this article.

Установить расширение 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'); 
0
# 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\";'" 
Смежные вопросы