Come installare e utilizzare PostgreSQL su Ubuntu 20.04

Introduzione

I sistemi di gestione di database relazionali sono un componente chiave di molti siti web e applicazioni. Forniscono un modo strutturato per memorizzare, organizzare e accedere alle informazioni.

PostgreSQL, o Postgres, è un sistema di gestione di database relazionali che fornisce un’implementazione del linguaggio di interrogazione SQL. È conforme agli standard e ha molte funzionalità avanzate come transazioni affidabili e concorrenza senza bloccare la lettura.

Questa guida dimostra come installare Postgres su un server Ubuntu 20.04. Fornisce anche alcune istruzioni per l’amministrazione generale del database.

Deploy di un database PostgreSQL con un clic utilizzando Database Gestiti DigitalOcean. Lascia che DigitalOcean si concentri su scalabilità, manutenzione e aggiornamenti per il tuo database.

Prerequisiti

Per seguire questo tutorial, avrai bisogno di un server Ubuntu 20.04 che sia stato configurato seguendo la nostra guida Configurazione Iniziale del Server per Ubuntu 20.04. Dopo aver completato questo prerequisito, il tuo server dovrebbe avere un utente non root con permessi sudo e un firewall di base.

Passaggio 1 — Installazione di PostgreSQL

I repository predefiniti di Ubuntu contengono pacchetti di Postgres, quindi puoi installarli usando il sistema di gestione dei pacchetti apt.

Se non lo hai fatto di recente, aggiorna l’indice locale dei pacchetti del server:

  1. sudo apt update

Successivamente, installa il pacchetto Postgres insieme a un pacchetto -contrib che aggiunge alcune utilità e funzionalità aggiuntive:

  1. sudo apt install postgresql postgresql-contrib

Assicurati che il server sia in esecuzione utilizzando il comando systemctl start:

  1. sudo systemctl start postgresql.service

Ora che il software è installato e in esecuzione, possiamo vedere come funziona e in che modo può essere diverso da altri sistemi di gestione di database relazionali che potresti aver usato in precedenza.

Passaggio 2 — Utilizzo di Ruoli e Database PostgreSQL

Per impostazione predefinita, Postgres utilizza un concetto chiamato “ruoli” per gestire l’autenticazione e l’autorizzazione. Questi sono, in alcuni casi, simili agli account regolari di stile Unix, ma Postgres non fa distinzione tra utenti e gruppi e preferisce invece il termine più flessibile “ruolo”.

All’installazione, Postgres è configurato per utilizzare l’autenticazione peer, il che significa che associa i ruoli di Postgres a un account di sistema Unix/Linux corrispondente. Se un ruolo esiste all’interno di Postgres, un nome utente Unix/Linux con lo stesso nome può accedere come tale ruolo.

La procedura di installazione ha creato un account utente chiamato postgres che è associato al ruolo predefinito di Postgres. Per utilizzare Postgres, puoi accedere a quell’account.

Ci sono alcuni modi per utilizzare questo account per accedere a Postgres.

Passare all’account postgres

Passare all’account postgres sul tuo server digitando:

  1. sudo -i -u postgres

Ora puoi accedere immediatamente al prompt di PostgreSQL digitando:

  1. psql

Da lì sei libero di interagire con il sistema di gestione del database secondo necessità.

Esci dal prompt di PostgreSQL digitando:

  1. \q

Questo ti riporterà al prompt del comando Linux postgres.

Accesso a un Prompt Postgres Senza Cambiare Account

Puoi anche eseguire il comando desiderato direttamente con l’account postgres utilizzando sudo.

Per esempio, nell’ultimo esempio, ti è stato indicato di accedere al prompt Postgres passando prima all’utente postgres e poi eseguendo psql per aprire il prompt Postgres. Potresti fare questo in un solo passaggio eseguendo il singolo comando psql come utente postgres con sudo, così:

  1. sudo -u postgres psql

Questo ti registrerà direttamente in Postgres senza lo shell bash intermedio.

Di nuovo, puoi uscire dalla sessione interattiva di Postgres digitando:

  1. \q

Molti casi d’uso richiedono più di un ruolo Postgres. Continua a leggere per imparare come configurarli.

Passo 3 — Creazione di un Nuovo Ruolo

Attualmente, hai solo il ruolo postgres configurato nel database. Puoi creare nuovi ruoli dalla riga di comando con il comando createrole. Il flag --interactive ti chiederà il nome del nuovo ruolo e se dovrebbe avere i permessi di superutente.

Se hai effettuato l’accesso come account postgres, puoi creare un nuovo utente digitando:

  1. createuser --interactive

Se, invece, preferisci utilizzare sudo per ogni comando senza passare al tuo account normale, digita:

  1. sudo -u postgres createuser --interactive

Lo script ti chiederà alcune scelte e, in base alle tue risposte, eseguirà i comandi Postgres corretti per creare un utente secondo le tue specifiche.

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

Puoi ottenere maggior controllo passando alcuni flag aggiuntivi. Dai un’occhiata alle opzioni consultando la pagina man:

  1. man createuser

La tua installazione di Postgres ora ha un nuovo utente, ma non hai ancora aggiunto alcun database. La prossima sezione descrive questo processo.

Passaggio 4 — Creazione di un Nuovo Database

Un’altra presupposizione che il sistema di autenticazione di Postgres fa per impostazione predefinita è che per qualsiasi ruolo utilizzato per accedere, tale ruolo avrà un database con lo stesso nome a cui può accedere.

Questo significa che se l’utente che hai creato nell’ultima sezione si chiama sammy, quel ruolo cercherà di connettersi a un database chiamato “sammy” per impostazione predefinita. Puoi creare il database appropriato con il comando createdb.

Se hai eseguito l’accesso con l’account postgres, dovresti digitare qualcosa del genere:

  1. createdb sammy

Se, invece, preferisci utilizzare sudo per ogni comando senza passare al tuo account normale, dovresti digitare:

  1. sudo -u postgres createdb sammy

Questa flessibilità offre più percorsi per la creazione dei database secondo necessità.

Passaggio 5 — Apertura di un Prompt Postgres con il Nuovo Ruolo

Per accedere con l’autenticazione peer, avrai bisogno di un utente Linux con lo stesso nome del tuo ruolo Postgres e del database.

Se non hai a disposizione un utente Linux corrispondente, puoi crearne uno con il comando adduser. Dovrai farlo dal tuo account non root con i privilegi sudo (cioè, non acceduto come l’utente postgres):

  1. sudo adduser sammy

Una volta disponibile questo nuovo account, puoi passare e connetterti al database digitando:

  1. sudo -i -u sammy
  2. psql

Oppure, puoi farlo in linea:

  1. sudo -u sammy psql

Questo comando ti accederà automaticamente, assumendo che tutti i componenti siano stati configurati correttamente.

Se vuoi che il tuo utente si connetta a un database diverso, puoi farlo specificando il database in questo modo:

  1. psql -d postgres

Una volta effettuato l’accesso, puoi controllare le informazioni sulla connessione corrente digitando:

  1. \conninfo
Output
You are connected to database "sammy" as user "sammy" via socket in "/var/run/postgresql" at port "5432".

Questo è utile se ti stai connettendo a database non predefiniti o con utenti non predefiniti.

Passaggio 6 — Creazione ed Eliminazione delle Tabelle

Ora che sai come connetterti al sistema di database PostgreSQL, puoi imparare alcune operazioni di gestione di base di Postgres.

La sintassi di base per la creazione delle tabelle è la seguente:

CREATE TABLE table_name (
    column_name1 col_type (field_length) column_constraints,
    column_name2 col_type (field_length),
    column_name3 col_type (field_length)
);

Come puoi vedere, questi comandi danno un nome alla tabella e quindi definiscono le colonne così come il tipo di colonna e la lunghezza massima dei dati del campo. Puoi anche opzionalmente aggiungere vincoli di tabella per ogni colonna.

Puoi saperne di più su come creare e gestire tabelle in Postgres qui.

A scopo dimostrativo, crea la seguente tabella:

  1. CREATE TABLE playground (
  2. equip_id serial PRIMARY KEY,
  3. type varchar (50) NOT NULL,
  4. color varchar (25) NOT NULL,
  5. location varchar(25) check (location in ('north', 'south', 'west', 'east', 'northeast', 'southeast', 'southwest', 'northwest')),
  6. install_date date
  7. );

Questo comando creerà una tabella che tiene traccia dell’inventario dell’attrezzatura da gioco. La prima colonna nella tabella conterrà i numeri di ID dell’attrezzatura di tipo serial, che è un intero incrementale automatico. Questa colonna ha anche il vincolo di PRIMARY KEY che significa che i valori al suo interno devono essere univoci e non nulli.

Le due linee successive creano colonne per il tipo e il colore dell’attrezzatura rispettivamente, entrambi i quali non possono essere vuoti. La linea successiva crea una colonna posizione e una vincolo che richiede che il valore sia uno dei otto possibili valori. L’ultima riga crea una colonna data che registra la data in cui è stata installata l’attrezzatura.

Per due delle colonne (equip_id e install_date), il comando non specifica una lunghezza del campo. Il motivo è che alcuni tipi di dati non richiedono una lunghezza definita perché la lunghezza o il formato è implicito.

Puoi vedere la tua nuova tabella digitando:

  1. \d
Output
List of relations Schema | Name | Type | Owner --------+-------------------------+----------+------- public | playground | table | sammy public | playground_equip_id_seq | sequence | sammy (2 rows)

La tua tabella da gioco è qui, ma c’è anche qualcosa chiamato playground_equip_id_seq che è del tipo sequenza. Questo è una rappresentazione del tipo seriale che hai dato alla tua colonna equip_id. Questo tiene traccia del prossimo numero nella sequenza e viene creato automaticamente per colonne di questo tipo.

Se vuoi vedere solo la tabella senza la sequenza, puoi digitare:

  1. \dt
Output
List of relations Schema | Name | Type | Owner --------+------------+-------+------- public | playground | table | sammy (1 row)

Con una tabella pronta, usiamola per praticare la gestione dei dati.

Passaggio 7 — Aggiunta, Interrogazione e Cancellazione di Dati in una Tabella

Ora che hai una tabella, puoi inserire alcuni dati al suo interno. Come esempio, aggiungi uno scivolo e un’altalena chiamando la tabella a cui desideri aggiungere, nominando le colonne e quindi fornendo i dati per ciascuna colonna, come questo:

  1. INSERT INTO playground (type, color, location, install_date) VALUES ('slide', 'blue', 'south', '2017-04-28');
  2. INSERT INTO playground (type, color, location, install_date) VALUES ('swing', 'yellow', 'northwest', '2018-08-16');

Dovresti fare attenzione nell’inserire i dati per evitare alcuni problemi comuni. Per prima cosa, non avvolgere i nomi delle colonne tra virgolette, ma i valori delle colonne che inserisci devono essere racchiusi tra virgolette.

Un’altra cosa da tenere presente è che non inserisci un valore per la colonna equip_id. Questo perché viene generato automaticamente ogni volta che aggiungi una nuova riga alla tabella.

Recupera le informazioni che hai aggiunto digitando:

  1. SELECT * FROM playground;
Output
equip_id | type | color | location | install_date ----------+-------+--------+-----------+-------------- 1 | slide | blue | south | 2017-04-28 2 | swing | yellow | northwest | 2018-08-16 (2 rows)

Qui puoi vedere che il tuo equip_id è stato compilato con successo e che tutti gli altri dati sono stati organizzati correttamente.

Se lo scivolo sul parco giochi si rompe e devi rimuoverlo, puoi anche rimuovere la riga dalla tua tabella digitando:

  1. DELETE FROM playground WHERE type = 'slide';

Interroga nuovamente la tabella:

  1. SELECT * FROM playground;
Output
equip_id | type | color | location | install_date ----------+-------+--------+-----------+-------------- 2 | swing | yellow | northwest | 2018-08-16 (1 row)

Nota che la riga dello scivolo non fa più parte della tabella.

Passaggio 8 — Aggiunta e Rimozione di Colonne da una Tabella

Dopo aver creato una tabella, puoi modificarla aggiungendo o rimuovendo colonne. Aggiungi una colonna per mostrare l’ultima visita di manutenzione per ciascun pezzo di attrezzatura digitando:

  1. ALTER TABLE playground ADD last_maint date;

Se visualizzi nuovamente le informazioni della tua tabella, vedrai che la nuova colonna è stata aggiunta ma non sono stati inseriti dati:

  1. SELECT * FROM playground;
Output
equip_id | type | color | location | install_date | last_maint ----------+-------+--------+-----------+--------------+------------ 2 | swing | yellow | northwest | 2018-08-16 | (1 row)

Se scopri che il tuo team di lavoro utilizza un altro strumento per tenere traccia della cronologia della manutenzione, puoi eliminare la colonna digitando:

  1. ALTER TABLE playground DROP last_maint;

Questa operazione elimina la colonna last_maint e tutti i valori trovati al suo interno, ma lascia intatti tutti gli altri dati.

Passaggio 9 — Aggiornamento dei Dati in una Tabella

Fino ad ora, hai imparato come aggiungere record a una tabella e come eliminarli, ma questo tutorial non ha ancora spiegato come modificare voci esistenti.

Puoi aggiornare i valori di una voce esistente interrogando il record che desideri e impostando la colonna sul valore che desideri utilizzare. Puoi cercare il record swing (questo corrisponderà a ogni altalena nella tua tabella) e cambiare il suo colore in rosso. Questo potrebbe essere utile se hai dato una verniciata all’altalena:

  1. UPDATE playground SET color = 'red' WHERE type = 'swing';

Puoi verificare che l’operazione sia stata eseguita con successo interrogando nuovamente i dati:

  1. SELECT * FROM playground;
Output
equip_id | type | color | location | install_date ----------+-------+-------+-----------+-------------- 2 | swing | red | northwest | 2018-08-16 (1 row)

Come puoi vedere, lo scivolo è ora registrato come rosso.

Conclusione

Sei ora configurato con PostgreSQL sul tuo server Ubuntu 20.04. Se desideri saperne di più su Postgres e come utilizzarlo, ti incoraggiamo a consultare le seguenti guide:

Source:
https://www.digitalocean.com/community/tutorials/how-to-install-and-use-postgresql-on-ubuntu-20-04