Introduzione

PostgreSQL o Postgres è un sistema di gestione di database relazionale di oggetti per scopi generici open source con molte funzionalità avanzate che consente di creare ambienti a tolleranza d'errore o applicazioni complesse.

In questa guida, discuteremo come installare il server di database PostgreSQL su CentOS 8. Prima di scegliere quale versione installare, assicurarsi che le applicazioni lo supportino.

Esploreremo anche le basi dell'amministrazione del database PostgreSQL.

Prerequisiti

Per poter installare i pacchetti, è necessario aver effettuato l'accesso come root o utente con privilegi sudo.

Se desideri installare PostgreSQL su un server in remoto continua a leggere, altrimenti salta il primo paragrafo "Connessione al Server" e leggi il successivo.

Connessione al Server

Per accedere al server, è necessario conoscere l'indirizzo IP. Avrai anche bisogno dell'username e della password per l'autenticazione. Per connettersi al server come utente root digitare il seguente comando:

ssh [email protected]_DEL_SERVER

Successivamente sarà necessario inserire la password dell'utente root.

Se non utilizzate l'utente root potete connettervi con un'altro nome utente utilizzando lo stesso comando, quindi modificare root con il vostro nome_utente:

ssh [email protected]_DEL_SERVER

Successivamente vi verrà chiesto di inserire la password del vostro utente.

La porta standard per connettersi tramite ssh è la 22, se il vostro server utilizza una porta diversa, sarà necessario specificarla utilizzando il parametro -p, quindi digitare il seguente comando:

ssh [email protected]_DEL_SERVER -p PORTA

Installare PostgreSQL su CentOS 8

Al momento della stesura di questo articolo, esistono due versioni del server PostgreSQL disponibili per l'installazione dai repository CentOS standard: versione 9.6 e 10.0.

Per elencare i flussi di moduli PostgreSQL disponibili, digitare:

dnf module list postgresql

L'output mostra che il modulo postgresql è disponibile con due flussi. Ogni flusso ha due profili: server e client. Lo stream 10 con il server dei profili è quello predefinito:

CentOS-8 - AppStream
Name          Stream    Profiles              Summary                                                 
postgresql    10 [d]    client, server [d]    PostgreSQL server and client module                     
postgresql    9.6       client, server [d]    PostgreSQL server and client module 

Per installare il flusso predefinito, digitare PostgreSQL versione server 10.0:

sudo dnf install @postgresql:10

Per installare il server PostgreSQL versione 9.6 digitare:

sudo dnf install @postgresql:9.6 

Potresti anche voler installare il pacchetto contrib che fornisce diverse funzionalità aggiuntive per il database PostgreSQL:

sudo dnf install postgresql-contrib

Una volta completata l'installazione, inizializza il database PostgreSQL con il seguente comando:

sudo postgresql-setup initdb
Initializing database ... OK

Avviare il servizio PostgreSQL e abilitarlo per l'avvio automatico all'avvio del sistema:

sudo systemctl enable --now postgresql

Utilizzare lo strumento psql per verificare l'installazione collegandosi al server di database PostgreSQL e stamparne la versione:

sudo -u postgres psql -c "SELECT version();"
PostgreSQL 10.6 on x86_64-redhat-linux-gnu, compiled by gcc (GCC) 8.2.1 20180905 (Red H
at 8.2.1-3), 64-bit

Ruoli e metodi di autenticazione PostgreSQL

PostgreSQL gestisce le autorizzazioni di accesso al database usando il concetto di ruoli. Un ruolo può rappresentare un utente del database o un gruppo di utenti del database.

PostgreSQL supporta più metodi di autenticazione. I metodi più comunemente usati sono:

  • Trust: un ruolo che può connettersi senza password, purché siano soddisfatte le condizioni definite in pg_hba.conf.
  • Password: un ruolo può connettersi fornendo una password. Le password possono essere memorizzate come scram-sha-256, md5, e password(con testo in chiaro).
  • Ident: supportato solo su connessioni TCP/IP. Funziona ottenendo il nome utente del sistema operativo del client, con una mappatura del nome utente opzionale.
  • Peer: identico a Ident, ma è supportato solo su connessioni locali.

L'autenticazione client PostgreSQL è definita nel file di configurazione denominato pg_hba.conf. Per impostazione predefinita, per le connessioni locali, PostgreSQL è impostato per utilizzare il metodo di autenticazione peer.

L'utente postgres viene creato automaticamente quando si installa il server PostgreSQL. Questo utente è il superutente per l'istanza PostgreSQL. È equivalente all'utente root di MySQL.

Per accedere al server PostgreSQL come utente postgres, cambiare utente e quindi accedere al prompt PostgreSQL utilizzando l'utility psql:

sudo su - postgres
psql

Da qui, è possibile interagire con l'istanza PostgreSQL. Per uscire dalla shell PostgreSQL, digitare:

\q

Dopo essere usciti dalla shell PostgreSQL torna al tuo utente originale:

exit

Puoi anche accedere al prompt PostgreSQL senza cambiare utente con il comando sudo:

sudo -u postgres psql

In genere l'utente postgres viene utilizzato solo dall'host locale.

Creare ruolo e database PostgreSQL

Solo i superutente e i ruoli con privilegio CREATEROLE possono creare nuovi ruoli.

Nell'esempio seguente, creeremo un nuovo ruolo denominato alice, un database denominato alicedb e garantiremo i privilegi sul database.

Innanzitutto, connettiti alla shell PostgreSQL:

sudo -u postgres psql

Crea un nuovo ruolo PostgreSQL usando il seguente comando:

create role alice;

Crea un nuovo database:

create database alicedb;

Concedere i privilegi all'utente sul database eseguendo la seguente query:

grant all privileges on database alicedb to alice;

Abilitare l'accesso remoto al server PostgreSQL

Per impostazione predefinita, il server PostgreSQL è in ascolto solo sull'interfaccia locale 127.0.0.1.

Installare l'editor di testo nano, oppure utilizzare quello di default vi:

sudo dnf install nano

Per abilitare l'accesso remoto al tuo server PostgreSQL, apri il file di configurazione:

sudo nano /var/lib/pgsql/data/postgresql.conf

Scorri verso il basso fino alla sezione CONNECTIONS AND AUTHENTICATION e aggiungi/modifica la  riga listen_addresses, in questo modo:

#------------------------------------------------------------------------------
# CONNECTIONS AND AUTHENTICATION
#------------------------------------------------------------------------------

# - Connection Settings -

listen_addresses = '*'     # what IP address(es) to listen on;

Salvare il file e riavviare il servizio PostgreSQL con:

sudo systemctl restart postgresql

Verifica le modifiche con l'utilità ss:

ss -nlt | grep 5432
LISTEN   0    128    0.0.0.0:5432    0.0.0.0:*       
LISTEN   0    128    [::]:5432      [::]:*  

L'output sopra mostra che il server PostgreSQL è in ascolto sulla porta predefinita su tutte le interfacce (0.0.0.0).

L'ultimo passaggio è configurare il server per accettare le connessioni remote modificando il file pg_hba.conf.

Di seguito sono riportati alcuni esempi che mostrano diversi casi d'uso:

sudo nano /var/lib/pgsql/data/pg_hba.conf
# TYPE  DATABASE        USER            ADDRESS                 METHOD

# The user jane can access all databases from all locations using an md5 password
host    all             alice            0.0.0.0/0                md5

# The user jane can access only the janedb database from all locations using an md5 password
host    alicedb          alice            0.0.0.0/0                md5

# The user jane can access all databases from a trusted location (192.168.1.134) without a password
host    all             alice            192.168.21.21            trust

Conclusione

CentOS 8 offre due versioni PostgreSQL: 9.6 e 10.0.

Per ulteriori informazioni su questo argomento, consultare la documentazione di PostgreSQL.