1 28/10/2026 10 min

Installare PostgreSQL e pgAdmin 4 su Ubuntu 24.04 e 22.04

Su Ubuntu 24.04 e 22.04 l’installazione di PostgreSQL è lineare, ma conviene scegliere subito il percorso giusto: pacchetti Ubuntu per un setup rapido, repository PostgreSQL per versioni più aggiornate e pgAdmin 4 con il canale più adatto al tuo ambiente. Qui trovi una procedura pulita, pensata per server e workstation, con verifiche a ogni passaggio.

La logica è semplice: prima installi il motore database, poi decidi come esporlo in rete, infine aggiungi pgAdmin 4 solo se ti serve davvero una console grafica. In un contesto di produzione, il punto non è solo “farlo partire”, ma farlo partire con un minimo di controllo: servizio attivo, autenticazione corretta, porta esposta solo dove serve e verifica finale con connessione reale.

1. Aggiornare il sistema e preparare i prerequisiti

Parti da un aggiornamento dei pacchetti e installa gli strumenti necessari per aggiungere repository esterni in modo corretto. Questo passaggio è utile sia su 24.04 sia su 22.04.

sudo apt update
sudo apt -y upgrade
sudo apt -y install curl ca-certificates gnupg lsb-release

Se il sistema è già in uso per altri servizi, controlla prima lo spazio disco e lo stato generale. PostgreSQL soffre poco gli ambienti piccoli, ma una partizione piena o quasi piena è uno dei motivi più banali per cui un’installazione apparentemente riuscita diventa instabile dopo poco.

df -h
systemctl --failed

Atteso: filesystem con margine sufficiente e nessun servizio in stato failed che possa interferire con il setup. Se hai già un PostgreSQL installato, verifica la versione prima di sovrascrivere o affiancare pacchetti diversi.

psql --version
systemctl status postgresql --no-pager

2. Installare PostgreSQL dai repository Ubuntu

Se ti basta la versione inclusa nei repository della distribuzione, questa è la strada più semplice. È spesso la scelta migliore per ambienti standard, dove la priorità è stabilità e manutenzione ordinaria.

sudo apt -y install postgresql postgresql-contrib

Dopo l’installazione, verifica che il servizio sia attivo e che la clusterizzazione iniziale sia andata a buon fine.

systemctl status postgresql --no-pager
pg_lsclusters

Su Ubuntu, PostgreSQL viene gestito con cluster separati. Con pg_lsclusters dovresti vedere una riga attiva, in ascolto su una porta come 5432, con stato online. Se il cluster non è online, il problema va chiarito prima di passare oltre.

Per testare la connessione locale, usa l’utente di sistema postgres, che è l’account amministrativo del database. Non usare subito l’accesso remoto: prima verifica che il motore risponda localmente.

sudo -u postgres psql -c "SELECT version();"

Atteso: una stringa con la versione del server PostgreSQL e nessun errore di socket o autenticazione. Se il comando fallisce, il primo punto da guardare è il log del servizio.

journalctl -u postgresql -n 50 --no-pager

3. Installare PostgreSQL dal repository ufficiale PostgreSQL

Se vuoi una versione più recente o un allineamento preciso tra 22.04 e 24.04, il repository ufficiale PostgreSQL è spesso la scelta migliore. È anche il modo più pulito per gestire aggiornamenti coerenti nel tempo.

Prima aggiungi la chiave e il repository. Il comando seguente usa i componenti standard per Ubuntu supportati dal progetto PostgreSQL.

sudo install -d /usr/share/postgresql-common/pgdg
curl -fsSL https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo gpg --dearmor -o /usr/share/postgresql-common/pgdg/apt.postgresql.org.gpg
. /etc/os-release
sudo sh -c "echo 'deb [signed-by=/usr/share/postgresql-common/pgdg/apt.postgresql.org.gpg] http://apt.postgresql.org/pub/repos/apt ${VERSION_CODENAME}-pgdg main' > /etc/apt/sources.list.d/pgdg.list"
sudo apt update

Ora installa la versione che ti serve. Se non hai un requisito specifico, puoi installare la release più recente disponibile per il tuo ramo Ubuntu. Sostituisci 16 con la major desiderata se necessario.

sudo apt -y install postgresql-16 postgresql-contrib-16

Verifica che il binario installato sia quello atteso e che il servizio risponda.

psql --version
systemctl status postgresql --no-pager
pg_lsclusters

Se hai più versioni installate, pg_lsclusters diventa il punto di riferimento per capire quale cluster è attivo e su quale porta ascolta. È un dettaglio importante quando migri da un’installazione vecchia o quando convivi con ambienti multipli.

4. Creare il primo database e l’utente applicativo

Appena il motore è pronto, evita di usare l’utente amministrativo per le applicazioni. Crea invece un utente dedicato e un database separato. È una regola basilare, ma spesso viene trascurata nei setup rapidi.

sudo -u postgres psql

Dentro la console SQL, crea un utente e un database con privilegi limitati. Cambia nome e password in base al tuo caso reale.

CREATE USER app_user WITH PASSWORD 'UnaPasswordLungaESegreta';
CREATE DATABASE app_db OWNER app_user;
GRANT ALL PRIVILEGES ON DATABASE app_db TO app_user;

Esci e testa il login con l’utente appena creato. Se la connessione locale funziona, hai già separato correttamente piano amministrativo e piano applicativo.

psql -h 127.0.0.1 -U app_user -d app_db -c "SELECT current_database(), current_user;"

Se la password non viene accettata, controlla il metodo di autenticazione configurato in /etc/postgresql/*/main/pg_hba.conf. Su installazioni recenti, l’accesso locale può essere impostato su peer per l’utente di sistema e su scram-sha-256 per le connessioni TCP.

5. Consentire l’accesso remoto in modo controllato

Per default PostgreSQL ascolta solo in locale. È una scelta corretta per sicurezza. Se devi collegarti da una macchina remota, modifica solo ciò che serve e lascia traccia del cambiamento. Prima di toccare la configurazione, fai un backup del file.

sudo cp /etc/postgresql/*/main/postgresql.conf /etc/postgresql/*/main/postgresql.conf.bak
sudo cp /etc/postgresql/*/main/pg_hba.conf /etc/postgresql/*/main/pg_hba.conf.bak

Nel file /etc/postgresql/<versione>/main/postgresql.conf imposta l’ascolto sull’interfaccia corretta. Se vuoi permettere l’accesso da tutte le interfacce, usa questa forma; se puoi restringere a un IP specifico, è meglio.

listen_addresses = 'localhost,192.168.1.10'

Nel file /etc/postgresql/<versione>/main/pg_hba.conf aggiungi una regola coerente con la tua rete. Esempio per una subnet interna:

host app_db app_user 192.168.1.0/24 scram-sha-256

Riavvia il servizio solo dopo aver controllato la sintassi dei file e aver definito il rollback. Se sbagli qui, il blast radius è il servizio database: tutte le applicazioni dipendenti ne risentono.

sudo systemctl restart postgresql
systemctl status postgresql --no-pager

Verifica poi che la porta sia effettivamente in ascolto sull’indirizzo previsto.

ss -ltnp | grep 5432

Se la porta non compare, controlla di nuovo postgresql.conf, i log di sistema e l’eventuale firewall locale. Su Ubuntu, se usi UFW, devi autorizzare il traffico solo dall’IP o dalla rete necessaria.

sudo ufw allow from 192.168.1.0/24 to any port 5432 proto tcp
sudo ufw status numbered

6. Installare pgAdmin 4 su Ubuntu

pgAdmin 4 può essere installato come applicazione desktop o come versione web. Su workstation Ubuntu spesso ha senso il desktop; su server o ambienti centralizzati, la versione web è più comoda. La scelta dipende da dove vuoi gestire il database e da quante persone devono usarlo.

Per il desktop, il metodo più semplice è installare il pacchetto disponibile nel repository. Se non lo trovi nella tua configurazione, il progetto mette a disposizione il proprio repository. Qui uso la strada standard con il repository ufficiale di pgAdmin.

curl -fsSL https://www.pgadmin.org/static/packages_pgadmin_org.pub | sudo gpg --dearmor -o /usr/share/keyrings/packages-pgadmin-org.gpg
. /etc/os-release
sudo sh -c "echo 'deb [signed-by=/usr/share/keyrings/packages-pgadmin-org.gpg] https://ftp.postgresql.org/pub/pgadmin/pgadmin4/apt/${VERSION_CODENAME} pgadmin4 main' > /etc/apt/sources.list.d/pgadmin4.list"
sudo apt update
sudo apt -y install pgadmin4

Se vuoi la versione desktop, in alcuni casi il pacchetto richiesto è pgadmin4-desktop; se vuoi la versione web, pgadmin4-web. La disponibilità esatta può variare in base al ramo e al repository configurato, quindi il controllo più affidabile è la lista dei pacchetti disponibili con apt-cache search pgadmin4.

apt-cache search pgadmin4

Per la versione web, l’installazione richiede un passaggio di inizializzazione. Dopo il pacchetto, esegui lo script dedicato e imposta l’account amministrativo dell’interfaccia.

sudo /usr/pgadmin4/bin/setup-web.sh

Il setup ti chiederà email e password dell’admin. Non riutilizzare credenziali già in uso altrove. Se il server è esposto, questo account diventa parte della superficie di attacco e va protetto con attenzione.

7. Collegare pgAdmin 4 a PostgreSQL

Dopo l’installazione, il vero test è la connessione al database. In pgAdmin crea un nuovo server dalla voce Add New Server o equivalente nella tua versione dell’interfaccia.

Compila i campi essenziali:

  • General: nome descrittivo, ad esempio “PostgreSQL locale” o “DB produzione”.
  • Connection: host, porta 5432, database di manutenzione, utente e password.
  • SSL: abilitalo solo se il server è configurato per usarlo davvero.

Se la connessione fallisce, non partire dal frontend: controlla prima se il server risponde con un test diretto da terminale. È il modo più rapido per distinguere un problema di database da un problema dell’interfaccia grafica.

psql -h 127.0.0.1 -U app_user -d app_db -c "SELECT 1;"

Se il test da terminale funziona ma pgAdmin no, il problema è quasi sempre nei parametri inseriti nell’interfaccia, nel profilo SSL o nel fatto che stai usando localhost invece dell’IP corretto in un setup con binding limitato.

8. Verifiche finali e controllo operativo

Prima di considerare concluso il lavoro, fai un controllo minimo ma realistico. Il servizio deve essere online, il database deve accettare connessioni e l’accesso remoto, se previsto, deve essere limitato solo agli indirizzi autorizzati.

  1. Controlla lo stato del servizio con systemctl status postgresql --no-pager e verifica che sia active (running).
  2. Controlla le porte con ss -ltnp | grep 5432 e conferma che l’ascolto corrisponda all’host previsto.
  3. Apri /var/log/postgresql/ o usa journalctl -u postgresql per cercare errori di autenticazione o di startup.
  4. Se hai attivato UFW, verifica che la regola sia limitata alla subnet o all’IP richiesto.
  5. In pgAdmin, prova un SELECT current_timestamp; per verificare che la sessione sia realmente operativa.

Se qualcosa non torna, torna indietro con il backup dei file di configurazione. Il rollback minimo consiste nel ripristino di postgresql.conf e pg_hba.conf dalla copia salvata, seguito da un riavvio del servizio.

sudo cp /etc/postgresql/*/main/postgresql.conf.bak /etc/postgresql/*/main/postgresql.conf
sudo cp /etc/postgresql/*/main/pg_hba.conf.bak /etc/postgresql/*/main/pg_hba.conf
sudo systemctl restart postgresql

Assunzioni: Ubuntu 22.04 o 24.04, systemd presente, accesso sudo disponibile, installazione locale o in rete interna, nessun proxy o CDN davanti al database.

Problemi frequenti e lettura rapida dei sintomi

Se il servizio non parte subito, i casi più comuni sono pochi e ripetitivi. Un errore di sintassi in postgresql.conf o pg_hba.conf blocca l’avvio; lo vedi subito nei log. Un cluster già esistente con versione diversa può creare confusione sulla porta. Un firewall troppo restrittivo può far sembrare il servizio morto anche quando è semplicemente in ascolto solo in locale.

Se invece pgAdmin si apre ma non collega il database, la distinzione da fare è netta: il problema può stare nel nome host, nella porta, nel metodo di autenticazione o nel fatto che il server non accetta connessioni TCP da quell’indirizzo. La verifica con psql resta il test più affidabile per separare i livelli.

In ambienti esposti verso Internet, il punto non è “aprire la porta e basta”, ma restringere al massimo la superficie: IP noti, password robuste, preferibilmente TLS, e nessun account amministrativo usato dalle applicazioni. È una di quelle configurazioni che sembrano noiose solo finché non diventano un problema.