PostgreSQL, spesso noto semplicemente come Postgres, è un sistema di gestione di database relazionale a oggetti per uso generale open source. Ha molte potenti funzionalità come backup online, ripristino point-in-time, transazioni nidificate, query SQL e JSON, controllo della concorrenza multi-versione (MVCC), replica asincrona e altro ancora.
Questo tutorial ti guida attraverso i passaggi dell'installazione del server di database PostgreSQL su Debian 10. Esploreremo anche i fondamenti dell'amministrazione di base del database.
Installazione di PostgreSQL #
Al momento della stesura di questo articolo, l'ultima versione di PostgreSQL disponibile dai repository Debian predefiniti è PostgreSQL versione 11.5.
Per installare PostgreSQL sul tuo server Debian, esegui i seguenti passaggi come utente root o utente con privilegi sudo:
-
Inizia aggiornando l'indice del pacchetto APT:
sudo apt update
-
Installa il server PostgreSQL e il pacchetto contrib che fornisce funzionalità aggiuntive per il database PostgreSQL:
sudo apt install postgresql postgresql-contrib
-
Una volta completata l'installazione, verrà avviato il servizio PostgreSQL. Per verificare l'installazione, utilizzare il
psql
strumento per stampare la versione del server:sudo -u postgres psql -c "SELECT version();"
L'output dovrebbe essere simile al seguente:
PostgreSQL 11.5 (Debian 11.5-1+deb10u1) on x86_64-pc-linux-gnu, compiled by gcc (Debian 8.3.0-6) 8.3.0, 64-bit
psql
è un programma terminale interattivo che consente di interagire con il server PostgreSQL. Ruoli PostgreSQL e metodi di autenticazione #
PostgreSQL gestisce le autorizzazioni di accesso al database utilizzando il concetto di ruoli. A seconda di come hai impostato il ruolo, può rappresentare un utente del database o un gruppo di utenti del database.
PostgreSQL supporta diversi metodi di autenticazione. I metodi più utilizzati sono:
- Fiducia:un ruolo può connettersi senza password, purché i criteri definiti 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 per 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 le connessioni locali, PostgreSQL è impostato per utilizzare il metodo di autenticazione peer.
L'utente "postgres" viene creato automaticamente durante l'installazione di PostgreSQL. Questo utente è il superutente per l'istanza PostgreSQL ed è equivalente all'utente root di MySQL.
Per accedere al server PostgreSQL come "postgres", passare a userpostgres e accedere a un prompt di PostgreSQL utilizzando il psql
utilità:
sudo su - postgres
psql
Da qui puoi interagire con il server PostgreSQL. Per uscire dal tipo di shell PostgreSQL:
\q
Puoi usare il sudo
comando per accedere al prompt di PostgreSQL senza cambiare utente:
sudo -u postgres psql
Il postgres
l'utente viene in genere utilizzato solo da localhost.
Creazione del ruolo PostgreSQL e del database #
Il createuser
comando consente di creare nuovi ruoli dalla riga di comando. Solo superutenti e ruoli con CREATEROLE
privilegio può creare nuovi ruoli.
Nell'esempio seguente creeremo un nuovo ruolo denominato kylo
, un database chiamato kylodb
e concedere privilegi sul database al ruolo.
-
Innanzitutto, crea il ruolo eseguendo il seguente comando:
sudo su - postgres -c "createuser kylo"
-
Quindi, crea il database usando
createdb
comando:sudo su - postgres -c "createdb kylodb"
-
Per concedere i permessi all'utente sul database, connettiti alla shell di PostgreSQL:
sudo -u postgres psql
Esegui la seguente query:
GRANT ALL PRIVILEGES ON DATABASE kylodb TO kylo;
Abilita accesso remoto al server PostgreSQL #
Per impostazione predefinita, il server PostgreSQL è in ascolto solo sull'interfaccia locale 127.0.0.1
.
Se vuoi connetterti al server PostgreSQL da postazioni remote, devi impostare il server in ascolto sull'interfaccia pubblica e modificare la configurazione per accettare connessioni remote.
Apri il file di configurazione postgresql.conf
e aggiungi listen_addresses = '*'
nel CONNECTIONS AND AUTHENTICATION
sezione. Questo indica al server di essere in ascolto su tutte le interfacce di rete.
sudo nano /etc/postgresql/11/main/postgresql.conf
/etc/postgresql/11/main/postgresql.conf#------------------------------------------------------------------------------
# CONNECTIONS AND AUTHENTICATION
#------------------------------------------------------------------------------
# - Connection Settings -
listen_addresses = '*' # what IP address(es) to listen on;
Salva il file e riavvia il servizio PostgreSQL per rendere effettive le modifiche:
sudo service postgresql restart
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 dovrebbe mostrare che il server PostgreSQL è in ascolto su tutte le interfacce (0.0.0.0).
L'ultimo passaggio consiste nel configurare il server per accettare accessi remoti modificando il pg_hba.conf
file.
Di seguito sono riportati alcuni esempi che mostrano diversi casi d'uso:
/etc/postgresql/11/main/pg_hba.conf# TYPE DATABASE USER ADDRESS METHOD
# The user jane will be able to access all databases from all locations using an md5 password
host all jane 0.0.0.0/0 md5
# The user jane will be able to access only the janedb from all locations using an md5 password
host janedb jane 0.0.0.0/0 md5
# The user jane will be able to access all databases from a trusted location (192.168.1.134) without a password
host all jane 192.168.1.134 trust