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

  1. 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;
    
  2. 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');
    
  3. 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');
    
  4. 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;
    
  5. 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 package postgresql-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 !