PostgreSQL o Postgres è un sistema di gestione di database relazionale a oggetti per uso generale open source con molte funzionalità avanzate che consente di creare ambienti a tolleranza di errore o applicazioni complesse.
In questa guida, discuteremo come installare il server di database PostgreSQL su CentOS 8. Prima di scegliere quale versione installare, assicurati che le tue applicazioni lo supportino.
Esploreremo anche le basi dell'amministrazione del database PostgreSQL.
Prerequisiti #
Per poter installare i pacchetti, devi essere loggato come root o utente con privilegi sudo.
Installazione di PostgreSQL su CentOS 8 #
Al momento della stesura di questo articolo, sono disponibili due versioni del server PostgreSQL per l'installazione dai repository CentOS standard:versione 9.6 e 10.0.
Per elencare i flussi di moduli PostgreSQL disponibili, digita:
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 del profilo è 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 lo stream predefinito, il server PostgreSQL versione 10.0 digita:
sudo dnf install @postgresql:10
-
Per installare il server PostgreSQL versione 9.6 digita:
sudo dnf install @postgresql:9.6
Potresti anche voler installare il pacchetto contrib che fornisce diverse funzionalità aggiuntive per il sistema di database PostgreSQL.
sudo dnf install postgresql-contrib
Una volta completata l'installazione, inizializzare il database PostgreSQL con il seguente comando:
sudo postgresql-setup initdb
Initializing database ... OK
Avvia il servizio PostgreSQL e abilitalo all'avvio all'avvio:
sudo systemctl enable --now postgresql
Usa il psql
strumento per verificare l'installazione collegandosi al server del 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 Hat 8.2.1-3), 64-bit
Ruoli PostgreSQL e metodi di autenticazione #
PostgreSQL gestisce le autorizzazioni di accesso al database utilizzando 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:
- Fiducia:un ruolo può connettersi senza password, purché le condizioni definite in
pg_hba.conf
sono soddisfatte. - Password:un ruolo può connettersi fornendo una password. Le password possono essere memorizzate come
scram-sha-256
,md5
epassword
(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 - Uguale a Ident, ma è supportato solo su connessioni locali.
L'autenticazione del 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.
Il postgres
l'utente viene creato automaticamente quando si installa il server PostgreSQL. Questo utente è il superutente per l'istanza PostgreSQL. È equivalente all'utente root MySQL.
Per accedere al server PostgreSQL come postgres
utente, prima passa all'utente, quindi accedi al prompt di PostgreSQL usando il psql
utilità:
sudo su - postgres
psql
Da qui, puoi interagire con l'istanza PostgreSQL. Per uscire dalla shell di PostgreSQL, digita:
\q
Puoi anche accedere al prompt di PostgreSQL senza cambiare utente con sudo
comando:
sudo -u postgres psql
Tipicamente il postgres
user viene utilizzato solo da localhost.
Creazione del ruolo PostgreSQL e del database #
Solo superutenti e ruoli con CREATEROLE
privilegio può creare nuovi ruoli.
Nell'esempio seguente creeremo un nuovo ruolo denominato john
, un database chiamato johndb
e concedere privilegi sul database.
-
Innanzitutto, connettiti alla shell PostgreSQL:
sudo -u postgres psql
-
Crea un nuovo ruolo PostgreSQL usando il comando seguente:
CREATE ROLE john;
-
Crea un nuovo database:
CREATE DATABASE johndb;
-
Concedi i privilegi all'utente sul database eseguendo la query seguente:
GRANT ALL PRIVILEGES ON DATABASE johndb TO john;
Abilita l'accesso remoto al server PostgreSQL #
Per impostazione predefinita, il server PostgreSQL è in ascolto solo sull'interfaccia locale 127.0.0.1
.
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 a CONNECTIONS AND AUTHENTICATION
sezione e aggiungi/modifica la seguente riga:
#------------------------------------------------------------------------------
# CONNECTIONS AND AUTHENTICATION
#------------------------------------------------------------------------------
# - Connection Settings -
listen_addresses = '*' # what IP address(es) to listen on;
Salva il file e riavvia il servizio PostgreSQL con:
sudo systemctl restart postgresql
Verifica le modifiche con ss
utilità:
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 consiste nel configurare il server per accettare connessioni remote modificando il pg_hba.conf
file.
Di seguito sono riportati alcuni esempi che mostrano diversi casi d'uso:
/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 jane 0.0.0.0/0 md5
# The user jane can access only the janedb database from all locations using an md5 password
host janedb jane 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 jane 192.168.1.134 trust