PostgreSQL e’ un DBMS che, a detta dello stesso sito, e’ il miglior database opensource. 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.