PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Joindre les résultats de deux bases de données distinctes

Selon http://wiki.postgresql.org/wiki/FAQ

Il n'y a aucun moyen d'interroger une base de données autre que la base de données actuelle. Parce que PostgreSQL charge des catalogues système spécifiques à la base de données, il est incertain de savoir comment une requête entre bases de données devrait se comporter. contrib/dblink autorise les requêtes entre bases de données à l'aide d'appels de fonction. Bien sûr, un client peut également établir des connexions simultanées à différentes bases de données et fusionner les résultats côté client.

MODIFIER :3 ans plus tard (mars 2014), cette entrée de la FAQ a été révisée et est plus utile :

Comment puis-je effectuer des requêtes à l'aide de plusieurs bases de données ?

Il n'existe aucun moyen d'interroger directement une base de données autre que celle en cours. Étant donné que PostgreSQL charge les catalogues système spécifiques à la base de données, il est incertain de savoir comment une requête inter-base de données devrait même se comporter.

Le support SQL/MED dans PostgreSQL permet de créer un « wrapper de données étrangères », liant les tables d'une base de données distante à la base de données locale. La base de données distante peut être une autre base de données sur la même instance PostgreSQL, ou une base de données à l'autre bout du monde, il n'a pas d'importance. postgres_fdw est intégré à PostgreSQL 9.3 et inclut le support de lecture/écriture; une version en lecture seule pour 9.2 peut être compilée et installée en tant que module contrib.

contrib/dblink permet des requêtes inter-bases de données à l'aide d'appels de fonction et est disponible pour les versions beaucoup plus anciennes de PostgreSQL. Contrairement à postgres_fdwit, il ne peut pas "pousser" les conditions vers le serveur distant, il va donc souvent récupérer beaucoup plus de données que vous n'en avez besoin.

Bien entendu, un client peut également établir des connexions simultanées à différentes bases de données et fusionner les résultats côté client.