PostgreSQL è un database open-source supportato a livello mondiale con oltre 30 anni di storia alle spalle: famoso per la sua robustezza, performance e la sua scalabilità grazie ai diversi add-on disponibili.
Per prima cosa dovrai connetterti al tuo server tramite una connessione SSH. Se non l’hai ancora fatto, ti consigliamo di seguire la nostra guida per connetterti in sicurezza con il protocollo SSH. In caso di server locale puoi passare al punto successivo e aprire il terminale del tuo server.
Installazione di PostgreSQL
Per procedere con l’installazione di PostgreSQL utilizza il gestore di pacchetti apt, assicurandoti di aggiornare la cache:
$ sudo apt update && sudo apt install postgresql postgresql-contrib
Una volta completata l’installazione il servizio sarà disponibile sin da subito. Per sicurezza controlla il file di log presente in /var/log/postgresql/postgresql-10-main.log
# tail /var/log/postgresql/postgresql-10-main.log
...LOG: database system is ready to accept connections
...
Se tutto funziona correttamente troverai tra le ultime righe del file di log il testo sopra indicato.
Verificare l’installazione
Per verificare la corretta installazione di PostgreSQL puoi utilizzare il client a riga di comando chiamato psql, ma prima devi utilizzare l’utente installato di default dal servizio. La configurazione di default di PostgreSQL utilizza gli stessi utenti del sistema come autenticazione per accedere al database.
Per entrare con l’utente di default quindi lancia dalla riga di comando:
Adesso puoi avviare il client e utilizzare il comando \l per visualizzare la lista dei database disponibili:
$ sudo -i -u postgres
$ psql
postgres=# \l
List of databases
Name | Owner | Encoding | Collate | Ctype | Access privileges
-----------+----------+----------+-------------+-------------+-----------------------
postgres | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 |
template0 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/postgres +
| | | | | postgres=CTc/postgres
template1 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/postgres +
| | | | | postgres=CTc/postgres
(3 rows)
postgres=# \q
postgres@Ubuntu-18-PSQ:~$ exit
Una volta completato puoi uscire dal client con il comanda \q e tornare con l’utente originale digitando exit.
Gestire utenti e permessi
Come accennato in precedenza, PostgreSQL presuppone che ogni utente presente nel suo servizio, sia presente anche nel sistema. Per poter creare un utente nuovo devi quindi prima aggiungerlo nel sistema tramite adduser:
$ sudo adduser tutorial
Adding user `tutorial' ...
Adding new group `tutorial' (1000) ...
Adding new user `tutorial' (1000) with group `tutorial' ...
Creating home directory `/home/tutorial' ...
Copying files from `/etc/skel' ...
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully
Changing the user information for tutorial
Enter the new value, or press ENTER for the default
Full Name []:
Room Number []:
Work Phone []:
Home Phone []:
Other []:
Is the information correct? [Y/n] y
In questo esempio stai creando un utente chiamato “tutorial” senza specificare altre informazioni come nome o telefono. Una volta completato puoi quindi creare l’utente PostgreSQL, effettuando prima l’accesso con l’utente postgres:
$ sudo -i -u postgres
$ createuser --interactive
Enter name of role to add: tutorial
Shall the new role be a superuser? (y/n) n
Shall the new role be allowed to create databases? (y/n) n
Shall the new role be allowed to create more new roles? (y/n) n
Dopo aver creato l’utente, imposta anche una password, accedendo tramite il superuser postgres e alterando l’utente appena creato:
$ psql
postgres=# ALTER USER tutorial PASSWORD 'password'; ALTER ROLE;
Eventualmente puoi anche prepare un database per l’utente appena creato eseguendo il comando:
Una volta completato puoi uscire e provare ad accedere tramite l’utente appena creato:
$ sudo -i -u tutorial
tutorial@Ubuntu-18-PSQ:~$ psql
psql (10.9 (Ubuntu 10.9-0ubuntu0.18.04.1))
Type "help" for help.
tutorial=> \l
List of databases
Name | Owner | Encoding | Collate | Ctype | Access privileges
-----------+----------+----------+-------------+-------------+-----------------------
postgres | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 |
template0 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/postgres +
| | | | | postgres=CTc/postgres
template1 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/postgres +
| | | | | postgres=CTc/postgres
tutorial | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 |
(4 rows)
Abilitare l’accesso a client esterni
In alcuni casi potrebbe risultare necessario permettere l’accesso da parte di client esterni (ad esempio la tua macchina) a uno o più database presenti sul server. Normalmente PostgreSQL non è configurato per accettare connessioni che non siano locali, quindi devi necessariamente alterare alcuni file di configurazione.
Il primo file da modificare è quello di configurazione principale, presente alla posizione /etc/postgresql/10/main/postgresql.conf.
Assicurati di modificare la seguente linea da:
listen_addresses = 'localhost'
Con:
In questa maniera informi PostgreSQL di aspettarsi connessioni in ingresso da qualsiasi interfaccia di rete.
Assicurati di salvare la modifica fatta. Puoi ora passare a modificare il file che gestisce le regole di accesso al server, presente in /etc/postgresql/10/main/pg_hba.conf aggiungendo la seguente riga:
host tutorial tutorial 0.0.0.0/0 md5
Questa modifica permette all’utente "tutorial" di accedere al suo database da qualsiasi host. Entrando nello specifico, i campi indicati sono:
-
host: che tipologia di connessione stai accettando, i possibili valori sono:
- local: connessioni non di rete, provenienti dal sistema
- host: qualsiasi tipo di connessione TCP / IP
- hostssl: connessioni TCP/IP solo sotto protocollo SSL
- hostnossl: connessioni TCP/IP NON sotto protocollo SSL
-
tutorial: nome del database a cui permettere l’accesso, utilizza "all" per indicare tutti i database
-
tutorial: nome utente a cui garantire l’accesso
-
0.0.0.0/0: indirizzo IP, nel tuo caso stai autorizzando l’accesso a qualsiasi indirizzo IPv4
-
md5: metodologia di autenticazione accettata, alcune tra le più importanti sono:
- md5: autenticazione tramite password
- trust: accetta la connessione incondizionatamente
- peer: utilizza il nome utente di sistema per collegarsi solo al database con stesso nome.
Per maggiori informazioni puoi consultare l’indirizzo https://www.postgresql.org/docs/9.1/auth-pg-hba-conf.html o la documentazione ufficiale PostgreSQL.
Una volta terminato, riavvia il servizio per applicare le modifiche:
$ sudo systemctl restart postgresql