Elencare e cambiare database in PostgreSQL

PostgreSQL, un potente sistema di database relazionale a oggetti open-source, offre una ricca serie di strumenti e funzioni per gestire i database in modo efficiente. Sia che siate un amministratore di database o uno sviluppatore backend, sapere come elencare e passare da un database all’altro è fondamentale per navigare in ambienti multi-database.

1. Prerequisiti

Prima di iniziare, assicuratevi che:

  • PostgreSQL sia installato sul vostro sistema(psql è accessibile).

  • Si disponga dei permessi appropriati (ad esempio, superutente o ruolo con diritti di connessione).

  • Ci si possa autenticare con il server PostgreSQL utilizzando un utente valido.

2. Elencare i database in PostgreSQL

🔍 Metodo 1: Utilizzo del metacomando psql

Avviare il terminale interattivo psql ed eseguire:

\l

Oppure la forma estesa:

\list

Questo restituisce un elenco di tutti i database:

  • Name

  • Owner

  • Encoding

  • Collation

  • Ctype

  • Access privileges

Metodo 2: Utilizzo di una query SQL

In alternativa, eseguire questa istruzione SQL:

SELECT datname FROM pg_database WHERE datistemplate = false;

Questa query esclude i database modello (template0, template1) e mostra i database creati dall’utente.

🛠️ Metodo 3: Shell a riga di comando

Al di fuori di psql, dal terminale:

psql -U postgres -c "\l"

Si può anche usare psql -l:

psql -l

3. Cambiare database

A differenza di altri RDBMS (ad esempio, MySQL), PostgreSQL non supporta il cambio di database all’interno della stessa sessione utilizzando un comando come USE dbname;.

Perché?

PostgreSQL stabilisce una connessione a un database specifico al momento del login. Per accedere a un altro database, è necessario disconnettersi e riconnettersi.

Approccio consigliato:

Uscire dalla sessione corrente e riconnettersi al database desiderato:

\q -- Esci dalla sessione psql corrente

Quindi:

psql -U username -d target_database

Oppure direttamente:

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

Esempio:

psql -U admin -d salesdb

4. Suggerimenti per un flusso di lavoro efficiente su più database

a. Utilizzare .pgpass per la commutazione senza password

Creare un file .pgpass per automatizzare l’autenticazione:

hostname:port:database:username:password

Assicurarsi che abbia i permessi corretti:

chmod 600 ~/.pgpass

b. Automatizzare con gli script di shell

Creare uno script che elenchi e commuti:

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

c. Utilizzare le variabili d’ambiente

Esportare il DB e l’utente predefiniti per un passaggio più rapido:

export PGDATABASE=mydb
esportare PGUSER=myuser
psql

5. Lavorare con PgAdmin e altre interfacce grafiche

In PgAdmin:

  1. Fare clic sul gruppo di server.

  2. Fare clic con il pulsante destro del mouse → Connetti a un database.

  3. Usare il menu a tendina dello strumento Query per cambiare database (crea una nuova scheda per ogni DB).

Molti strumenti (DBeaver, DataGrip) consentono connessioni multiple con viste del database a schede.

6. Bonus: controllare il database corrente

All’interno di psql, trovare il database corrente:

SELECT current_database();

Oppure utilizzare:

\conninfo

Conclusione

Sebbene PostgreSQL non permetta di cambiare database in sessione come altri motori SQL, il suo robusto modello di connessione garantisce un controllo degli accessi e una gestione delle risorse pulita e coerente. Padroneggiando le tecniche di elencazione e adottando pratiche di riconnessione intelligenti, è possibile gestire in modo efficiente e passare da un database PostgreSQL all’altro in qualsiasi ambiente, sia tramite CLI, GUI o script.