Comment utiliser (Installer) DBLINK dans PostgreSQL?

Je suis habitué à Oracle et à créer un dblink dans mon schéma et puis accéder à une base de données distante comme celle-ci: mytable@myremotedb , y a-t-il de toute façon faire la même chose 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 j'obtiens l'erreur suivante:

conseil: aucune fonction ne correspond au nom donné et aux types d'arguments. Vous pourriez avoir besoin d'ajouter des types de moulages explicites.

quelqu'un a une idée ? Devons-nous" activer " les liens DBL 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 dblink aussi? Je continue à avoir un could not establish connection . C'est la ligne du type:

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

adresse IP correcte et Postgres tourne sur le serveur distant. Une idée?

40
demandé sur Erwin Brandstetter 2010-10-05 14:08:57

6 réponses

avec PostgreSQL 9.1 ou plus tard , l'installation de modules supplémentaires a été simplifiée. extensions enregistrées (y compris dblink) peut être installé avec CREATE EXTENSION :

CREATE EXTENSION dblink;

s'Installe dans votre schéma par défaut ( public par défaut). Assurez-vous que votre search_path est configuré correctement avant d'exécuter la commande et le schéma est visible à tous les utilisateurs qui doivent travailler avec.

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

CREATE EXTENSION dblink SCHEMA extensions;

voir:

lancer une fois par base de données. Ou l'exécuter dans la base de données système standard template1 pour l'ajouter à chaque nouvellement créé DB automatiquement. détails dans le manuel.

vous devez avoir les fichiers fournissant le module installé sur le serveur en premier. Pour Debian et ses dérivés, il s'agirait du paquet postgresql-contrib-9.1 - pour PostgreSQL 9.1, évidemment.

89
répondu Erwin Brandstetter 2018-04-22 11:23:02

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

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

Installer DbLink extension.

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 la base de données:

SELECT dblink_connect('host=localhost user=postgres password=enjoy dbname=postgres');
13
répondu Anvesh 2016-03-30 04:57:48

sur linux, trouver dblink.sql, puis exécuter dans la console postgresql quelque chose comme ceci 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

10
répondu evgeni 2011-03-03 02:16:17

installer des modules nécessite généralement d'exécuter un script sql qui est inclus avec l'installation de la base de données.

supposant un système D'exploitation semblable à linux

find / -name dblink.sql

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

4
répondu Unreason 2010-10-05 10:20:55

il peut être ajouté en utilisant:

$psql -d databaseName -c "CREATE EXTENSION dblink"
1
répondu angelous 2014-10-09 13:11:38
# 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
répondu Yordan Georgiev 2017-07-28 15:14:42