tux

Negli esercizi svolti si fa spesso uso del database PostgreSQL. Questi sono gli appunti essenziali su come installarlo su Ubuntu server 16.04 e configurarlo per l'utilizzo.

Installazione:

sudo apt-get install postgresql

E' probabile che si effettui il collegamento da altre macchine di conseguenza conviene abilitare l'accesso remoto. Modificare il contenuto del file di configurazione con un editor:

/etc/postgresql/9.5/main$ nano postgresql.conf

Modificando la seguente riga come indicato:

listen_addresses = '*'

Ora è necessario impostare la password per l'utente postgres. Durante l'installazione questo utente è stato creato come utente linux, per collegarsi al database è necessario lanciare il programma psql nelle vesti di utente postgres:

sudo -u postgres psql

Per modificare la password per l'utente postgres:

postgres=# \password

Verrà richiesto di inserire la nuova password due volte. E' necessario fare un'ultima modifica al file pg_hba.conf di configurazione per abilitare l'autenticazione MD5 per l'utente postgres; uscire dalla consolle postgres con il comando \q:

/etc/postgresql/9.5/main$ sudo nano pg_hba.conf

Individuare e modificare la riga come segue:

# IPv4 local connections:
host    all       all       0.0.0.0/0         md5

Il passo successivo è quello di prendere confidenza con il database, uno strumento GUI molto valido può essere pgAdmin 4 che ovviamente andrebbe installato su un computer connesso in rete al server visto che il server non ha interfaccia grafica.

Con le modifiche appena effettuate alla configurazione è possibile accedere in remoto al server tramite pgAdmin 4, altrimenti è possibile utilizzare la consolle del server per accedere al db con comandi da shell.

Per semplificare la digitazione diventiamo utente postgres poi proviamo a creare e distruggere un database:

$ sudo su postgres
$ createdb paolo
$ dropdb paolo

Essendo un utilizzatore di MySQL da parecchio tempo ho impiegato un attimo a capire che questi comandi vanno impartiti senza lanciare un client da cui operare; l'unica condizione è che si passi all'utente postgres prima di lavorare sul db, dopodichè si lanciano i comandi direttamente dalla shell.

A questo punto per accedere al database (ho ricreato il db paolo precedentemente distrutto) si entra in un apposito client:

$ psql paolo
psql (9.5.6)
Type "help" for help.
paolo=# 

Da questa consolle è possibile vedere l'elenco dei database presenti e anche cambiare database in uso. Per vedere la lista digitare \l, per cambiare db \c nomedb.

                                  List of databases
Name    |  Owner   | Encoding |   Collate   |    Ctype    |   Access privileges   
-----------+----------+----------+-------------+-------------+-----------------------
 mydb      | postgres | UTF8     | it_IT.UTF-8 | it_IT.UTF-8 | 
 paolo     | postgres | UTF8     | it_IT.UTF-8 | it_IT.UTF-8 | 
 postgres  | postgres | UTF8     | it_IT.UTF-8 | it_IT.UTF-8 | 
 template0 | postgres | UTF8     | it_IT.UTF-8 | it_IT.UTF-8 | =c/postgres          +
           |          |          |             |             | postgres=CTc/postgres
 template1 | postgres | UTF8     | it_IT.UTF-8 | it_IT.UTF-8 | =c/postgres          +
           |          |          |             |             | postgres=CTc/postgres
(5 rows)

Nel db paolo creiamo una tabella prova con due colonne: id, descrizione

paolo=# CREATE TABLE prova (
paolo(# id int,
paolo(# descrizione varchar(80));

Si può tranquillamente andare a capo tra una riga e la successiva in quanto la query viene esaminata solo dopo aver digitato il punto e virgola. Per verificare quanto appena inserito si può utilizzare il comando psql \d+ che restituisce la descrizione estesa della tabella (con solo \d la descrizione è ridotta): 

paolo=# \d+ prova
                                 Table "public.prova"
   Column    |         Type          | Modifiers | Storage  | Stats target | Description 
-------------+-----------------------+-----------+----------+--------------+-------------
 id          | integer               |           | plain    |              | 
 descrizione | character varying(80) |           | extended |              | 

Nella tabella prova inseriamo un record di valori:

paolo=# insert into prova (id, descrizione) values (1, 'primo record');

Per le istruzioni sql è possibile utilizzare sia caratteri maiuscoli, come fatto in precedenza, che caratteri minuscoli come nella presente query. Con una nuova query verifichiamo i dati inseriti:

paolo=# select * from prova;
 id | descrizione  
----+--------------
  1 | primo record
(1 row)

La tabella appena creata può essere distrutta con il comando drop.

paolo=# drop table prova;

Volendo importare un database precedentemente creato e salvato in un file SQL la procedura è semplice; è necessario creare il database di destinazione poi si può utilizzare il programma psql:

$ sudo su postgres
$ createdb destination_db
$ psql destination_db < mydb.sql