Introduzione

PostgreSQL, o Postgres, è un sistema di gestione di database relazionali. Ha il vantaggio di essere conforme agli standard e con molte funzionalità avanzate.

In questo tutorial spiegheremo come installare Postgres su Linux Mint 19 Tara.

Installare PostgresSQL

È possibile installare PostgresSQL utilizzando il repository ufficiale di Linux Mint con apt.

Aggiornare la lista dei pacchetti:
sudo apt update

Installare PostgresSQL
sudo apt install postgresql postgresql-contrib

Utilizzare PostgresSQL

Di default Postgres utilizza un concetto chiamato "roles" per gestire autenticazione e autorizzazione, simili ai normali account in stile Unix.

Al momento dell'installazione, Postgres è impostato per utilizzare l'autenticazione ident, ovvero associa i roles di Postgres a un utente di sistema Linux corrispondente. Se esiste un role all'interno di Postgres, con lo stesso nome di un utente Linux, questo sarà in grado di accedere come tale ruolo.

La procedura di installazione ha creato un account utente chiamato postgres associato al role Postgres predefinito.

Per utilizzare questo account e per accedere a postgres ci sono diverse procedure.

Per loggare con l'utente postgres, da terminale:
sudo -i -u postgres

Quindi per accedere al prompt di Postgres e gestire il database, scrivere;
psql

Per uscire dal prompt di Postgres, scrivere:
\q

Creare un nuovo Role

Attualmente, hai solo il role di postgres configurato all'interno del database. È possibile creare nuovi roles dalla riga di comando con il comando createrole. L'opzione --interactive ti chiederà il nome del nuovo ruolo e ti chiederà anche se dovrebbe avere i permessi di superutente.

Se avete ancora il prompt di postgres attivo, scrivere:
\q

Se siete loggati con l'account postgres, è possibile creare un nuovo utente con il seguente comando:
createuser --interactive

Se siete loggati con un'altro account non ancora associato a postgres, utilizzare il seguente comando:
sudo -u postgres createuser --interactive

Vi verrà chiesto di inserire un nome per il nuovo role e di associargli i privilegi di superuser

Enter name of role to add: noviello
Shall the new role be a superuser? (y/n) y

Creare un nuovo Database

Il sistema di autenticazione di Postgres di default associa il role ad un database con lo stesso nome.

Quindi, se l'utente creato precedentemente è chiamato noviello, tale role tenterà di connettersi a un database che viene anche chiamato noviello per impostazione predefinita. È possibile creare il database appropriato con il comando createdb.

Se siete loggati con l'account postgres, è possibile creare un nuovo database con il seguente comando:
createdb noviello

Se siete loggati con un'altro account non ancora associato a postgres, utilizzare il seguente comando:
sudo -u postgres createdb noviello

Per accedere al prompt di Postgres con il nuovo role appena creato, è necessario che esista un utente Linux, in questo caso su Linux Mint, con lo stesso nome dato al role ed al database.

Se non esiste un utente con questo nome, è possibile crearne uno con il comando adduser.

Effettuare questa procedura con un account utente che non sia postgres.

Per creare un nuovo utente:
sudo adduser noviello

Adesso possiamo connetterci con il nuovo utente al database ed usare il prompt di postgres:
sudo -i -u noviello
psql

Per connettersi ad un database differente con l'utente corrente:
psql -d postgres

Per ottenere informazioni riguardo la connessione corrente:
\conninfo

Dovresti visualizzare un messaggio di risposta simile a questo:

You are connected to database "noviello" as user "noviello" via socket in "/var/run/postgresql" at port "5432".

Aggiungere ed eliminare dati nelle tabelle

Il seguente è un esempio per creare una tabella:

CREATE TABLE test (
    id serial PRIMARY KEY,
    esempio_1 varchar (50) NOT NULL,
    esempio_2 varchar (25) NOT NULL,
    esempio_3 varchar(25) check (esempio_3 in ('valore_1', 'valore_2', 'valore_3', 'valore_4', 'valore_5', 'valore_6', 'valore_7', 'valore_8')),
    data_ins date
);

Per visualizzare la tabella appena creata:
\d

Dovresti visualizzare un messaggio di risposta simile a questo:

                  List of relations
 Schema |          Name           |   Type   | Owner
--------+-------------------------+----------+---------
 public | test                    | table    | noviello
 public | test_id_seq             | sequence | noviello
(2 rows)

Per visualizzare la tabella senza ulteriori informazioni:
\dt

Dovresti visualizzare un messaggio di risposta simile a questo:

          List of relations
 Schema |    Name    | Type  | Owner
--------+------------+-------+---------
 public | test       | table | noviello
(1 rows)

Per inserire dei nuovi valori nella tabella:
INSERT INTO test (esempio_1, esempio_2, esempio_3, data_ins) VALUES ('valore_1', 'valore_2', 'valore_3', '2018-06-29');

INSERT INTO test (esempio_1, esempio_2, esempio_3, data_ins) VALUES ('valore_4', 'valore_5', 'valore_6', '2018-06-29');

Per recuperare le informazioni appena inserite:
SELECT * FROM test;

Dovresti visualizzare un messaggio di risposta simile a questo:

 id | esempio_1 | esempio_2 | esempio_3 |  data_ins
----+-----------+-----------+-----------+------------
  1 | valore_1  | valore_2  | valore_3  | 2018-06-29
  2 | valore_4  | valore_5  | valore_6  | 2018-06-29
(2 row)

Per rimuovere una riga dal database:
DELETE FROM test WHERE esempio_1 = 'valore_1';

Recuperare nuovamente le informazioni dal database per verificare la corretta eliminazione della riga:
SELECT * FROM test;

Dovresti visualizzare un messaggio di risposta simile a questo:

 id | esempio_1 | esempio_2 | esempio_3 |  data_ins
----+-----------+-----------+-----------+------------
  2 | valore_4  | valore_5  | valore_6  | 2018-06-29
(1 row)

Eliminare e aggiungere colonne nelle tabelle

Per aggiungere una colonna al database:
ALTER TABLE test ADD altro date;

Per visualizzare le modifiche ripetere il comando seguente:
SELECT * FROM test;

Dovresti visualizzare un messaggio di risposta simile a questo:

 id | esempio_1 | esempio_2 | esempio_3 |  data_ins  |  altro
----+-----------+-----------+-----------+------------+-----------
  2 | valore_4  | valore_5  | valore_6  | 2018-06-29 | 
(1 row)

Per eliminare una colonna:
ALTER TABLE test DROP altro;

Per visualizzare le modifiche ripetere il comando seguente:
SELECT * FROM test;

Dovresti visualizzare un messaggio di risposta simile a questo, quindi senza la colonna creata in precedenza:

 id | esempio_1 | esempio_2 | esempio_3 |  data_ins  
----+-----------+-----------+-----------+------------
  2 | valore_4  | valore_5  | valore_6  | 2018-06-29 
(1 row)

Modificare i dati in una tabella

Per modificare dei dati è necessario specificare il nome del database e la colonna che si vuole modificare:
UPDATE test SET esempio_2 = 'nuovo_valore' WHERE esempio_1 = 'valore_4';

Per visualizzare le modifiche ripetere il comando seguente:
SELECT * FROM test;

Dovresti visualizzare un messaggio di risposta simile a questo:

 id | esempio_1 | esempio_2 | esempio_3 |  data_ins
----+-----------+-----------+-----------+------------
  2 | valore_4  | nuovo_valore  | valore_6  | 2018-06-29
(1 row)

L'installazione di PostgreSQL su Linux Mint 19 Tara è terminata