 
 PostgreSQL o Postgres è un sistema di gestione di database relazionale a oggetti open source con molte funzionalità avanzate che consente di creare applicazioni Web complesse.
In questo tutorial, ti mostreremo due diversi metodi su come installare PostgreSQL sul tuo computer CentOS 7. Il primo metodo ti guiderà attraverso i passaggi necessari per installare PostgreSQL v9.2.23 dai repository CentOS mentre il secondo ti mostrerà come installare l'ultima versione di PostgreSQL dai repository PostgreSQL ufficiali.
Se la tua applicazione non richiede l'ultima versione, ti consigliamo di utilizzare il primo metodo e di installare PostgreSQL dai repository CentOS.
Esploreremo anche i fondamenti dell'amministrazione del database PostgreSQL.
Prerequisiti #
Prima di continuare con questo tutorial, assicurati di aver effettuato l'accesso come utente con privilegi sudo.
Installa PostgreSQL dai repository CentOS #
Al momento della stesura di questo articolo, l'ultima versione di PostgreSQL disponibile dai repository CentOS è PostgreSQL versione 9.2.23.
Per installare PostgreSQL sul tuo server CentOS segui i passaggi seguenti:
-  Installazione di PostgreSQL Per installare il server PostgreSQL insieme al pacchetto contrib PostgreSQL che fornisce diverse funzionalità aggiuntive per il database PostgreSQL è sufficiente digitare: sudo yum install postgresql-server postgresql-contrib
-  Inizializzazione del database Inizializza il database PostgreSQL con il seguente comando: sudo postgresql-setup initdbInitializing database ... OK
-  Avvio di PostgreSQL Per avviare il servizio PostgreSQL e consentirne l'avvio all'avvio, digita semplicemente: sudo systemctl start postgresqlsudo systemctl enable postgresql
-  Verifica dell'installazione di PostgreSQL Per verificare l'installazione cercheremo di connetterci al server del database PostgreSQL utilizzando il psqlstrumento e stampa la versione del server:sudo -u postgres psql -c "SELECT version();"PostgreSQL 9.2.23 on x86_64-redhat-linux-gnu, compiled by gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-16), 64-bit (1 row)
Installa PostgreSQL dai repository PostgreSQL #
Al momento della stesura di questo articolo, l'ultima versione di PostgreSQL disponibile dai repository PostgreSQL ufficiali è PostgreSQL versione 10.4. Prima di continuare con il passaggio successivo dovresti visitare la pagina PostgreSQL Yum Repository e verificare se è disponibile una nuova versione.
Segui i passaggi seguenti per installare l'ultima versione di PostgreSQL sul tuo server CentOS :
-  Abilitazione del repository PostgreSQL Per abilitare il repository PostgreSQL è sufficiente installare il repository rpmfile:sudo yum install https://download.postgresql.org/pub/repos/yum/10/redhat/rhel-7-x86_64/pgdg-centos10-10-2.noarch.rpm
-  Installazione di PostgreSQL Una volta abilitato il repository, installa il server PostgreSQL e i pacchetti contrib PostgreSQL con: sudo yum install postgresql10-server postgresql10-contrib
-  Inizializzazione del database Per inizializzare il tipo di database PostgreSQL: sudo /usr/pgsql-10/bin/postgresql-10-setup initdbInitializing database ... OK
-  Avvio di PostgreSQL Per avviare il servizio PostgreSQL e consentirne l'avvio all'avvio, digitare: sudo systemctl start postgresql-10sudo systemctl enable postgresql-10
-  Verifica dell'installazione di PostgreSQL Per verificare l'installazione cercheremo di connetterci al server del database PostgreSQL utilizzando il psqlstrumento e stampa la versione del server:sudo -u postgres /usr/pgsql-10/bin/psql -c "SELECT version();"PostgreSQL 10.4 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-28), 64-bit (1 row)
Ruoli PostgreSQL e metodi di autenticazione #
Le autorizzazioni di accesso al database all'interno di PostgreSQL sono gestite con 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 - Con questo metodo, il ruolo può connettersi senza password, purché i criteri definiti nel pg_hba.confsono soddisfatte.
- Password:un ruolo può connettersi fornendo una password. Le password possono essere memorizzate come scram-sha-256md5epassword(testo in chiaro).
- Ident - Questo metodo è 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 user viene creato automaticamente quando installi PostgreSQL. Questo utente è il superutente per l'istanza PostgreSQL ed è equivalente all'utente root di MySQL.
 Per accedere al server PostgreSQL come utente postgres devi prima passare a userpostgres e quindi accedere al prompt di PostgreSQL usando il psql utilità:
sudo su - postgrespsql
Da qui, puoi interagire con la tua istanza PostgreSQL. Per uscire dalla shell di PostgreSQL, digita:
\q
 Puoi anche accedere al prompt di PostgreSQL senza cambiare utente usando sudo comando:
sudo -u postgres psql
 Il postgres utente viene in genere utilizzato solo dall'host locale e si consiglia di non impostare la password per questo utente.
psql binario che è /usr/pgsql-10/bin/psql . 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.
-  Connettiti alla shell PostgreSQL sudo -u postgres psql
-  Crea un nuovo ruolo PostgreSQL Il comando seguente creerà un nuovo ruolo chiamato "john": CREATE ROLE john;
-  Crea un nuovo database PostgreSQL Crea un nuovo database chiamato "johndb" usando il createdbcomando:CREATE DATABASE johndb;
-  Concedi privilegi Per concedere le autorizzazioni al johnutente sul database che abbiamo creato nel passaggio precedente, eseguire 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 postgresql.conf e aggiungi listen_addresses = '*' nel CONNECTIONS AND AUTHENTICATION sezione.
sudo vim /var/lib/pgsql/data/postgresql.conf/var/lib/pgsql/10/data/postgresql.conf ./var/lib/pgsql/data/postgresql.conf#------------------------------------------------------------------------------
# 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 postgresqlsystemctl restart postgresql-10 . 
 Verifica le modifiche con ss utilità:
ss -nlt | grep 5432LISTEN   0         128                 0.0.0.0:5432             0.0.0.0:*
LISTEN   0         128                    [::]:5432                [::]:*
Come puoi vedere dall'output sopra, il server PostgreSQL è in ascolto 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 will be able to access all databases from all locations using a 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 a 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
/var/lib/pgsql/10/data/pg_hba.conf .