web-dev-qa-db-fra.com

Comment utiliser (installer) dblink dans PostgreSQL?

Je suis habitué à Oracle et à créer un lien symbolique dans mon schéma, puis à accéder à une base de données distante telle que celle-ci: mytable@myremotedb, y a-t-il quoi qu'il en soit de faire de même avec PostgreSQL?

En ce moment, j'utilise dblink comme ceci: 

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

Lorsque j'exécute cette commande, l'erreur suivante apparaît:

CONSEIL: Aucune fonction ne correspond aux types de nom et d'argument donnés. Vous devrez peut-être ajouter des conversions de type explicites.

Est-ce que quelqu'un a une idée ? Devons-nous "activer" les liens ou faire quelque chose avant de les utiliser?

Y a-t-il quelque chose à faire sur la base de données distante que nous allons interroger? Faut-il aussi activer dblink? Je continue d'avoir un could not establish connection. C'est la ligne est de type:

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

L'adresse IP est correcte et Postgres est en cours d'exécution sur le serveur distant. Une idée?

45
Spredzy

Avec PostgreSQL 9.1 ou version ultérieure, l'installation de modules supplémentaires a été simplifiée. Les extensions enregistrées (y compris dblink) peuvent être installées avec CREATE EXTENSION :

CREATE EXTENSION dblink;

Installe dans votre schéma par défaut (public par défaut). Assurez-vous que votre search_path est défini correctement avant d'exécuter la commande et que le schéma est visible pour tous les utilisateurs qui doivent l'utiliser.

Alternativement, vous pouvez installer sur n’importe quel schéma de votre choix avec:

CREATE EXTENSION dblink SCHEMA extensions;

Voir:

Exécuter une fois par base de données. Ou exécutez-le dans la base de données système standard template1 pour l'ajouter automatiquement à chaque nouvelle base de données créée. Détails dans le manuel.

Vous devez d'abord installer les fichiers fournissant le module sur le serveur. Pour Debian et ses dérivés, ce serait évidemment le paquet postgresql-contrib-9.1 - pour PostgreSQL 9.1.

96

J'utilise DBLINK pour connecter la base de données interne aux requêtes croisées. 

Référence tirée de cet article.

Installer l'extension DbLink.

CREATE EXTENSION dblink;

Verify 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%';

Tester la connexion de la base de données:

SELECT dblink_connect('Host=localhost user=postgres password=enjoy dbname=postgres');
16
Anvesh

Sur linux, recherchez dblink.sql, puis exécutez quelque chose comme ceci dans la console postgresql pour créer toutes les fonctions requises: 

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

vous devrez peut-être installer les packages contrib: Sudo apt-get install postgresql-contrib

11
evgeni

L'installation de modules nécessite généralement l'exécution d'un script SQL inclus dans l'installation de la base de données.

En supposant qu'un système d'exploitation de type Linux

find / -name dblink.sql

Vérifier l'emplacement et l'exécuter

4
Unreason

Il peut être ajouté en utilisant:

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