Premier Training & Business Partner Red Hat

PostgreSQL, il piu’ avanzato database opensource del mondo

Alessandro Lorenzi
Ti piacerebbe diventare anche tu uno di noi e
pubblicare i tuoi articoli nel blog degli RHCE italiani?

PostgreSQL e’ un DBMS che, a detta dello stesso sito, e’ il miglior database opensource. postgresql E’ aderente agli standard SQL, molto potente, e supporta PL/pgSQL un linguaggio di programmazione molto simile al PL/SQL di Oracle. PostgreSQL si piazza in un mercato tra MySQL e Oracle, da una parte piu’ potente di MySQL, dall’altra (forse) meno potente di Oracle, ma con il vantaggio, non solo economico, di essere Open Source.

Installazione su RHEL e CentOS

Troviamo PostgreSQL sui repository di RHEL e CentOS, quindi per installarlo ed abilitarlo all’avvio usiamo i soliti comandi:

yum install -y postgresql postgresql-server
 
# Postgresql non puo' avviarsi senza aver prima creato i database di base. Per fare cio' diamo il comando:
service postgresql initdb
service postgresql start
chkconfig postgresql on

EDIT: Per ottenere una versione piu’ recente del database potete scaricare l’rpm direttamente dal sito di PostgreSQL.

rpm -ivh http://yum.postgresql.org/9.3/redhat/rhel-6-x86_64/pgdg-redhat93-9.3-1.noarch.rpm
yum install postgresql93-server postgresql93-contrib

Gestione degli utenti e connessione al database

Come primo utente del database viene creato “postgres”. Per connetterci al db diamo i comandi

su - postgres
psql

In automatico viene agganciato il database con lo stesso nome dell’utente, in questo caso postgres. Per gestire gli utenti vengono fornite le utilities createuser e dropuser

createuser -Pde alorenzi
dropuser -e alorenzi

Le opzioni -P e -d ordinano rispettivamente di mostrare il prompt per la password e dare all’utente i permessi per creare database. L’opzione -e mostra invece il comando SQL che viene inviato al database. Il file /var/lib/pgsql/data/pg_hba.conf e’ molto importante per l’autenticazione degli utenti al server. Indica per ogni tipo di connessione (locale, remota, remota con ssl), per ogni database, per ogni utente, per ogni host/domain quale tipo di autenticazione viene accettata.

local      database  user  auth-method  [auth-options]
host       database  user  address  auth-method  [auth-options]
hostssl    database  user  address  auth-method  [auth-options]
hostnossl  database  user  address  auth-method  [auth-options]
host       database  user  IP-address  IP-mask  auth-method  [auth-options]
hostssl    database  user  IP-address  IP-mask  auth-method  [auth-options]
hostnossl  database  user  IP-address  IP-mask  auth-method  [auth-options]

I valori di default riportano solo connessioni in locale via unix socket, IPv4 e IPv6. Modifichiamo l’autenticazione ident (che utilizza pam) e utilizziamo password. Un database non andrebbe mai esposto su internet, ma puo’ essere tranquillamente usato all’interno della nostra lan, meglio ancora sarebbe indicare quali host possono connettersi al db.

host all all 10.0.5.3/0 password

Proviamo quindi l’autenticazione

psql -U alorenzi -t template0 -h localhost
#template1=>

Creazione del database

Per creare il database possiamo usare il comodo comando bash createdb

createdb -U alorenzi myproject "Descrizione della tabella per myproject"

Il linguaggio PLpg/SQL

Utilizzando il linguaggio SQL normale il client invia una query al database che il database deve interpretare ed elaborare, il client riceve dei dati, li ri-elabora, li reinvia al database etc etc fino a che non si raggiunge il risultato finale. Per ottimizzare il tutto sarebbe molto piu’ semplice se il client potesse inviare un’unica query, far fare i calcoli al database e ricevere il risultato finale; sarebbe un risparmio in termini di numero connessioni al database, quantita’ di dati scambiati e computazione per i parsing delle query intermedie. Per risolvere questo problema possiamo utilizzare il linguaggio PL/pgSQL. Grazie a questo linguaggio il client fa una singola query al database, vengono elaborati i dati sul database e ritorna il risulatato al client. Il linguaggio e’ semplice, potete trovare qui una completa guida al linguaggio di programmazione.

Info about author

Alessandro Lorenzi

RHCE Consultant at Extraordy