Tutorial > Come installare un server PostgreSQL su Ubuntu 18.04

Come installare un server PostgreSQL su Ubuntu 18.04

Pubblicato il: 02 ottobre 2019

Database DBMS PostgreSQL Ubuntu

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:

$ sudo -i -u postgres

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

[email protected]:~$ 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:

$ createdb tutorial

Una volta completato puoi uscire e provare ad accedere tramite l’utente appena creato:

$ sudo -i -u tutorial

[email protected]:~$ 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:

listen_addresses = '*'

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:

  1. 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
  2. tutorial: nome del database a cui permettere l’accesso, utilizza "all" per indicare tutti i database

  3. tutorial: nome utente a cui garantire l’accesso

  4. 0.0.0.0/0: indirizzo IP, nel tuo caso stai autorizzando l’accesso a qualsiasi indirizzo IPv4

  5. 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