2010-10-05 5 views
39

Je suis habitué à Oracle et de créer un dblink dans mon schéma puis d'accéder à une base de données distante comme celle-ci: [email protected], est-ce qu'il en est de même pour PostgreSQL?Comment utiliser (installer) dblink dans PostgreSQL?

En ce moment je suis en utilisant dblink comme ceci:

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

Quand j'exécuter cette commande, je reçois l'erreur suivante:

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

Est-ce que quelqu'un a une idée? Devons-nous «activer» les dblinks 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? Devons-nous activer le dblink aussi? Je continue d'avoir un could not establish connection. Ceci est la ligne est le 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?

Répondre

15
+4

Votre premier lien m'a aidé. Je ne savais pas que ça faisait partie de contrib, donc je ne savais pas que je devais l'activer. \ i /usr/share/postgresql/8.4/contrib/dblink.sql a fait l'affaire! Je vous remercie ! – Spredzy

+0

Très utile mais espérons que les liens ne meurent jamais ... – Alfabravo

4

modules Installation requiert habituellement pour exécuter un script SQL qui est inclus avec l'installation de base de données.

En supposant Linux comme OS

find/-name dblink.sql 

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

10

Sur linux, trouver dblink.sql, puis exécuter dans quelque chose de la console postgresql comme celui-ci pour créer toutes les fonctions requises:

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

vous pourriez avoir besoin d'installer les paquets contrib: sudo apt-get install postgresql-contrib

+0

Avec le paquet 'postgres-contrib-9.3',' dblink.sql' est maintenant 'dblink - 1.1.sql'. –

81

Avec PostgreSQL 9.1 ou version ultérieure, l'installation de modules supplémentaires a été simplifiée. Registered extensions (including dblink) peut être installé 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 travailler avec.

Alternativement, vous pouvez installer à tout 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 à chaque DB nouvellement créé automatiquement. Details in the manual.

Vous devez d'abord avoir les fichiers fournissant le module installé sur la machine locale. Pour Debian et ses dérivés, il s'agirait du paquet postgresql-contrib-9.1 - pour PostgreSQL 9.1, évidemment.

+0

Rien n'est si simple avec PostgreSQL ... Erreur "/usr/share/postgresql/9.1/extension/dblink.control": Fichier ou répertoire non trouvé ... Il y a une commande simple pour le réparer? –

+0

... Idem dans un autre serveur avec pg9.3 moderne (chez Debian). Le message SQL est "ERREUR: impossible d'ouvrir le fichier de contrôle d'extension" /usr/share/postgresql/9.3/extension/dblink.control ': Aucun fichier ou répertoire de ce type " –

+0

@PeterKrauss: Avez-vous installé le paquet contrib comme indiqué? pg 9.3 n'est pas dans la version stable actuelle (Wheezy). Vous l'obtenez à partir du ** [PostgreSQL Apt Repository] (http://www.postgresql.org/download/linux/debian/) **. –

1

Il peut être ajouté à l'aide:

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

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

Reference taken from this article.

Installer l'extension dbLink.

CREATE EXTENSION dblink; 

Vérifier 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%'; 

Test de connexion de base de données:

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\";'" 
Questions connexes