Quando installi PostgreSQL, per impostazione predefinita la connessione al database tramite TCP/IP non è consentita.
Quando si tenta di connettersi da un client a un database PostgreSQL remoto utilizzando il comando psql, è possibile che venga visualizzato il messaggio di errore "psql:impossibile connettersi al server:connessione rifiutata".
Nell'esempio seguente, da una macchina client, stiamo provando a connetterci a un database PostgreSQL in esecuzione sul server 192.168.102.1. Come puoi vedere dall'output, dice chiaramente che il database PostgreSQL remoto non accetta la connessione.
# psql -U postgres -h 192.168.102.1 psql: could not connect to server: Connection refused Is the server running on host "192.168.102.1" and accepting TCP/IP connections on port 5432?
Per abilitare la connessione TCP/IP per il database PostgreSQL, devi seguire i due passaggi indicati di seguito.
1. Modifica pg_hba.conf per aggiungere il record di autenticazione client
Sul server di database PostgreSQL, per impostazione predefinita, noterai i seguenti record verso la fine di /var/lib/pgsql/data/pg_hba.conf. Come indicato di seguito, accetta connessioni solo dal localhost.
# IPv4 local connections: host all all 127.0.0.1/32 trust # IPv6 local connections: host all all ::1/128 ident
Aggiungi la seguente riga al server pg_hba.conf. Ciò consentirà la connessione dall'indirizzo IP "192.168.101.20" (questo è il client nel nostro esempio). Se desideri consentire la connessione da più computer client su una rete specifica, specifica qui l'indirizzo di rete nel formato dell'indirizzo CIDR.
# vi /var/lib/pgsql/data/pg_hba.conf host all all 192.168.101.20/24 trust
Di seguito sono riportati vari formati di record di autenticazione client supportati nel file pg_hba.conf. Stiamo utilizzando il formato n. 2 di questo elenco.
- metodo di autenticazione utente del database locale [opzione-autenticazione]
- host database utente indirizzo CIDR metodo di autenticazione [opzione-autenticazione]
- utente database hostssl indirizzo CIDR metodo di autenticazione [opzione-autenticazione]
- utente database hostnossl indirizzo CIDR metodo di autenticazione [opzione-autenticazione]
Invece del formato "indirizzo CIDR", puoi anche specificare l'indirizzo IP e la maschera di rete in campi separati utilizzando il seguente formato di record.
- indirizzo IP dell'utente del database host Maschera IP metodo di autenticazione [opzione-autenticazione]
- Indirizzo IP dell'utente del database hostssl Maschera IP Metodo di autenticazione [opzione-autenticazione]
- indirizzo IP utente del database hostnossl IP-mask metodo di autenticazione [opzione-autenticazione]
2. Modifica l'indirizzo di ascolto in postgresql.conf
Sul server di database PostgreSQL, per impostazione predefinita, l'indirizzo di ascolto sarà localhost nel file postgresql.conf come mostrato di seguito.
# grep listen /var/lib/pgsql/data/postgresql.conf listen_addresses = 'localhost'
Modifica questa riga e dai *. Se hai più interfacce sul server, puoi anche specificare un'interfaccia specifica da ascoltare.
# grep listen /var/lib/pgsql/data/postgresql.conf listen_addresses = '*'
3. Testare la connessione remota
Ora, accedi alla macchina client 192.168.101.20 ed esegui la connessione remota psql al server di database PostgreSQL (192.168.102.1) come mostrato di seguito. Questa volta dovrebbe funzionare.
# psql -U postgres -h 192.168.102.1 Welcome to psql 8.1.11 (server 8.4.18), the PostgreSQL interactive terminal. postgres=#
Inoltre, se non vuoi specificare il nome host nel parametro della riga di comando ogni volta, puoi impostare l'indirizzo IP del database PostgreSQL remoto nel nome della variabile di ambiente PGHOST come mostrato di seguito.
# export PGHOST=192.168.102.1 # psql -U postgres Welcome to psql 8.1.11 (server 8.4.18), the PostgreSQL interactive terminal. postgres=#