Pouvez-vous effectuer des requêtes entre bases de données
avec PostgreSQL ? Voici comment faire !
Si vous travaillez avec PostgreSQL, vous vous êtes peut-être demandé s’il est possible d’effectuer des requêtes entre bases de données
. Cela survient généralement lorsque vous devez accéder ou manipuler des données partitionnées sur différentes bases de données. Une situation courante est quand deux bases de données partagent des données mais sont configurées séparément—ce qui amène à la question : Pouvez-vous interroger une base de données depuis une autre dans PostgreSQL ?
Le défi des requêtes entre bases de données
Vous pourriez rencontrer un message d’erreur similaire à celui-ci en essayant d’exécuter une requête entre bases de données :
databaseA=# select * from databaseB.public.someTableName;
ERROR: les références entre bases de données ne sont pas mises en œuvre : "databaseB.public.someTableName"
Cette erreur indique que PostgreSQL ne prend pas en charge nativement les références directes entre bases de données. Par conséquent, si vos données sont stockées dans des bases de données séparées et que vous devez effectuer des requêtes entre elles, vous aurez besoin d’une solution alternative.
La solution : Utiliser des wrappers de données externes
Pour effectuer des requêtes entre bases de données dans PostgreSQL, vous pouvez utiliser la fonctionnalité wrappers de données externes, spécifiquement postgres_fdw
. Cela vous permet de vous connecter facilement à des tables de n’importe quelle base de données PostgreSQL, qu’elle soit locale ou distante.
Configuration de postgres_fdw
-
Installer l’extension : Assurez-vous que l’extension
postgres_fdw
est activée dans votre installation PostgreSQL. Vous pouvez créer l’extension avec la commande suivante :CREATE EXTENSION postgres_fdw;
-
Définir un serveur étranger : Créez un serveur étranger qui se connecte à la base de données cible :
CREATE SERVER foreign_server_name FOREIGN DATA WRAPPER postgres_fdw OPTIONS (host 'host_address', dbname 'databaseB', port '5432');
-
Créer un mappage utilisateur : Vous devrez créer un mappage pour l’utilisateur afin de se connecter au serveur étranger :
CREATE USER MAPPING FOR local_user SERVER foreign_server_name OPTIONS (user 'remote_user', password 'remote_password');
-
Importer le schéma étranger : Vous pouvez importer le schéma étranger contenant les tables que vous souhaitez accéder :
IMPORT FOREIGN SCHEMA public FROM SERVER foreign_server_name INTO local_schema;
-
Interroger la table distante : Maintenant, vous pouvez interroger les tables étrangères comme des tables locales ordinaires :
SELECT * FROM local_schema.some_table_name;
Pour les versions plus anciennes de PostgreSQL
Si vous utilisez une version de PostgreSQL avant 9.3, la fonctionnalité de wrappers de données externes n’est pas disponible. Cependant, vous pouvez utiliser la fonction dblink
, qui vous permet de vous connecter à d’autres bases de données PostgreSQL.
- Utilisation de
dblink
: Vous devrez installer le packagepostgresql-contrib
si ce n’est pas déjà inclus dans votre distribution. Ensuite, vous pouvez exécuter une requête comme celle-ci :SELECT * FROM dblink('dbname=databaseB user=remote_user password=remote_password', 'SELECT * FROM public.some_table_name') AS t(column1 type1, column2 type2, ...);
Remarque : Envisagez toujours de restructurer vos bases de données si possible. Utiliser des
schémas
au sein de la même base de données au lieu de bases de données séparées peut considérablement améliorer la gestion et l’accessibilité des données.
Conclusion
Bien que PostgreSQL ne prenne pas en charge nativement les requêtes entre bases de données, l’utilisation de wrappers de données externes comme postgres_fdw
offre un excellent moyen de contourner ce problème. En configurant les paramètres nécessaires, vous pouvez accéder et manipuler les données dans différentes bases de données sans effort.
Si vous utilisez une version plus ancienne, gardez à l’esprit que bien que dblink
soit une option, la mise à niveau vers les dernières versions de PostgreSQL peut offrir de meilleures fonctionnalités et un meilleur support.
Avec les bons outils et stratégies, accéder aux données à travers les bases de données est plus facile que jamais. Bonnes requêtes !