Lister et changer de base de données dans PostgreSQL

PostgreSQL, un puissant système de base de données objet-relationnel open-source, offre un riche ensemble d’outils et de fonctionnalités pour gérer efficacement les bases de données. Que vous soyez administrateur de base de données ou développeur backend, savoir comment lister et passer d’une base de données à l’autre est essentiel pour naviguer dans des environnements multi-bases de données.

1. Conditions préalables

Avant de commencer, assurez-vous que

  • PostgreSQL est installé sur votre système(psql est accessible).

  • Vous avez les permissions appropriées (par exemple, superutilisateur ou rôle avec droits de connexion).

  • Vous pouvez vous authentifier auprès du serveur PostgreSQL en utilisant un utilisateur valide.

2. Lister les bases de données dans PostgreSQL

méthode 1 : Utiliser la méta-commande psql

Lancez le terminal interactif psql et exécutez :

\l

Ou la forme développée :

\Liste

Cela renvoie une liste de toutes les bases de données :

  • Name

  • Owner

  • Encoding

  • Collation

  • Ctype

  • Access privileges

Méthode 2 : Utilisation d’une requête SQL

Vous pouvez également exécuter cette instruction SQL :

SELECT datname FROM pg_database WHERE datistemplate = false;

Cette requête exclut les bases de données modèles (template0, template1) et affiche les bases de données créées par l’utilisateur.

🛠️ Méthode 3 : Ligne de commande

En dehors de psql, à partir de votre terminal :

psql -U postgres -c "\l"

Vous pouvez également utiliser psql -l:

psql -l

3. Changer de base de données

Contrairement à d’autres SGBDR (par exemple MySQL), PostgreSQL ne supporte pas le changement de base de données dans la même session en utilisant une commande comme USE dbname ;.

Pourquoi ?

PostgreSQL établit une connexion à une base de données spécifique au moment de la connexion. Pour accéder à une autre base de données, vous devez vous déconnecter et vous reconnecter.

Approche recommandée :

Quitter la session courante et se reconnecter à la base de données désirée :

\q -- Quitter la session psql actuelle

Puis :

psql -U username -d target_database

Ou directement :

psql -U username -d target_database -h hostname -p port

Exemple :

psql -U admin -d salesdb

4. Conseils pour un flux de travail efficace sur plusieurs bases de données

a. Utiliser .pgpass pour une commutation sans mot de passe

Créez un fichier .pgpass pour automatiser l’authentification :

hostname:port:database:username:password

Assurez-vous que les permissions sont correctes :

chmod 600 ~/.pgpass

b. Automatiser avec des scripts Shell

Créez un script pour lister et commuter :

#!/bin/bash
echo "Available Databases:"
psql -U postgres -c "\l"
read -p "Enter target DB: " db
psql -U postgres -d "$db"

c. Utiliser les variables d’environnement

Exporter la base de données et l’utilisateur par défaut pour une commutation plus rapide :

export PGDATABASE=mydb
export PGUSER=monutilisateur
psql

5. Travailler avec PgAdmin et d’autres interfaces graphiques

Dans PgAdmin :

  1. Cliquez sur le groupe de serveurs.

  2. Cliquez avec le bouton droit de la souris → Connecter à une base de données.

  3. Utiliser le menu déroulant de l’outil de requête pour changer de base de données (crée un nouvel onglet par base de données).

De nombreux outils (DBeaver, DataGrip) permettent des connexions multiples avec des vues de base de données à onglets.

6. Bonus : Vérifier la base de données actuelle

Dans psql, recherchez votre base de données actuelle :

SELECT current_database() ;

Ou utilisez :

\conninfo

Conclusion

Bien que PostgreSQL ne permette pas le changement de base de données en cours de session comme d’autres moteurs SQL, son modèle de connexion robuste assure un contrôle d’accès et une gestion des ressources propres et cohérents. En maîtrisant les techniques de listage et en adoptant des pratiques de reconnexion intelligentes, vous pouvez gérer efficacement et passer d’une base de données PostgreSQL à une autre dans n’importe quel environnement – que ce soit via l’interface CLI, l’interface graphique ou des scripts.