Se oltre ai caratteri al­fa­nu­me­ri­ci (lettere, numeri, caratteri speciali) occorre gestire anche tipi di dati complessi o contenuti mul­ti­me­dia­li, ci si rende conto che i classici sistemi di gestione del database re­la­zio­na­li cozzano contro i propri limiti. Tuttavia i database re­la­zio­na­li a oggetti o i sistemi di gestione del database che ampliano il modello tra­di­zio­na­le in­clu­den­do approcci orientati agli oggetti for­ni­sco­no la risposta adeguata a questo problema: il mapping re­la­zio­na­le a oggetti (object-re­la­tio­nal mapping in inglese) consente loro di uti­liz­za­re oggetti basati su linguaggi di pro­gram­ma­zio­ne orientati a oggetti anche nei sistemi re­la­zio­na­li. Una delle soluzioni più popolari e al contempo antiche in questo contesto è il database open source Post­gre­SQL, noto anche come Postgres.

Che cos’è Post­gre­SQL?

Post­gre­SQL ha alle proprie spalle oltre 30 anni di sviluppo. Il sistema di gestione del database re­la­zio­na­le a oggetti (ORDBMS) ha le proprie radici nel progetto POSTGRES dell’Uni­ver­si­tà della Ca­li­for­nia a Berkeley. È stato avviato nel 1986 sotto la guida di Michael Sto­ne­bra­ker e spon­so­riz­za­to dalla Defence Advanced Research Project Agency (DARPA) e dalla National Science Foun­da­tion (NSF). Nel 1994 gli studenti Andrew Yu e Jolly Chen estesero il codice di base con un in­ter­pre­ter SQL e pub­bli­ca­ro­no questa nuova versione dal 30 al 50 percento più veloce con il nome di Postgres95 come soluzione open source (con una licenza propria che as­so­mi­glia alle licenze BSD e MIT). Due anni dopo l’ap­pli­ca­zio­ne per database, con la versione 6.0, ha preso il nome di Post­gre­SQL, uti­liz­za­to ancora oggi.

N.B.

Accanto al nuovo nome Post­gre­SQL viene ancora uti­liz­za­to anche il nome ori­gi­na­rio Postgres (anche se oggi viene raramente scritto in maiuscolo). Oltre alle mo­ti­va­zio­ni pret­ta­men­te sen­ti­men­ta­li, l’utilizzo del vecchio nome è spesso dovuto alla sua maggiore sem­pli­ci­tà.

Il progetto POSTGRES ha svolto un prezioso lavoro pio­nie­ri­sti­co e ha svi­lup­pa­to numerosi concetti che sono stati in­tro­dot­ti suc­ces­si­va­men­te in altri sistemi di database (prin­ci­pal­men­te com­mer­cia­li). Pertanto Post­gre­SQL non si distingue solo come database conforme a SQL, ma anche at­tra­ver­so le seguenti moderne feature:

  • Pos­si­bi­li­tà di domande complesse
  • Chiavi esterne (foreign keys) per il col­le­ga­men­to di dati da due tabelle
  • Trigger che vengono attivati au­to­ma­ti­ca­men­te in ingresso e con­trol­la­no, con­fer­ma­no, mo­di­fi­ca­no, eliminano o in al­ter­na­ti­va in­se­ri­sco­no i dati di ri­fe­ri­men­to
  • Vi­sua­liz­za­zio­ni ag­gior­na­bi­li
  • Concetto di tran­sa­zio­ne completo
  • Mul­ti­ver­sion Con­cur­ren­cy Control (MVCC) per eseguire in modo ef­fi­cien­te l’accesso si­mul­ta­neo al database

Inoltre gli utenti possono mo­di­fi­ca­re ed estendere no­te­vol­men­te Post­gre­SQL grazie alla licenza gratuita, ag­giun­gen­do ad esempio nuovi tipi di dati, funzioni, operatori, metodi di in­di­ciz­za­zio­ne o linguaggi pro­ce­du­ra­li (linguaggi di pro­gram­ma­zio­ne per la scrittura di funzioni e trigger).

Postgres: dati di base e requisiti di sistema

La fles­si­bi­li­tà di Post­gre­SQL non è solo evidente in termini di fun­zio­na­li­tà, espan­di­bi­li­tà e per­so­na­liz­za­zio­ne: il database offre buon gioco anche per l’in­stal­la­zio­ne di software e hardware. Ad esempio Postgres è incluso nella maggior parte delle di­stri­bu­zio­ni UNIX/Linux ed è stato fornito da Apple a partire da Mac OS X Lion (10.7) come database pre­de­fi­ni­to.

L’unico requisito è che sia in­stal­la­ta una versione gmake ag­gior­na­ta (3.80 o suc­ces­si­va), già inclusa nei file binari finiti. Grazie ad appositi pacchetti di in­stal­la­zio­ne si possono se­le­zio­na­re come piat­ta­for­ma per il sistema anche i sistemi operativi Windows. La potenza di calcolo e la capacità di ar­chi­via­zio­ne delle richieste dipendono solo dalle di­men­sio­ni del sistema di database pia­ni­fi­ca­to: il software open source in sé richiede a malapena 20 MB.

Il fatto che nella pratica si è più limitati dalle proprie capacità di ar­chi­via­zio­ne piuttosto che dai limiti di Post­gre­SQL si può fa­cil­men­te desumere dai seguenti dati chiave del database re­la­zio­na­le a oggetti:

DiĀ­menĀ­sioĀ­ne massima del database IlĀ­liĀ­miĀ­taĀ­ta
DiĀ­menĀ­sioĀ­ne massima di una tabella 32 Terabyte
DiĀ­menĀ­sioĀ­ne massima di un record 1,6 Terabyte
DiĀ­menĀ­sioĀ­ne massima di un campo 1 Gigabyte
Numero massimo di colonne A seconda del tipo di dati da 250 a 1.600
Numero massimo di righe IlĀ­liĀ­miĀ­taĀ­to
Numero massimo di indici IlĀ­liĀ­miĀ­taĀ­to

Come funziona Post­gre­SQL?

Postgres si basa sul tipico modello client-server: il com­po­nen­te centrale del server con il nome “post­ma­ster” gestisce tutti i file di database e tutte le con­nes­sio­ni stabilite con il server di database per la co­mu­ni­ca­zio­ne (input e output). Gli utenti ne­ces­si­ta­no solo di un adeguato programma client per la con­nes­sio­ne, per cui il pacchetto software Post­gre­SQL con psql ha già integrato una soluzione nativa per il fun­zio­na­men­to tramite la riga di comando o il terminale.

In al­ter­na­ti­va è possibile passare a varie ap­pli­ca­zio­ni con in­ter­fac­ce grafiche, come pgAdmin o php­P­gAd­min che si può in­stal­la­re e uti­liz­za­re op­zio­nal­men­te. Per i siti web in­te­rat­ti­vi il web server nor­mal­men­te assume il ruolo del client.

Fatto

Molte di­stri­bu­zio­ni Linux for­ni­sco­no un proprio client grafico Postgres con pgAccess.

A quali progetti è adatto Post­gre­SQL?

Come sistema di gestione di database col­lau­da­to ed estre­ma­men­te fles­si­bi­le, Postgres è uti­liz­za­to in numerosi settori e scenari. Il database re­la­zio­na­le a oggetti si distingue come base di prima classe per gestire in sicurezza una vasta gamma di ap­pli­ca­zio­ni. Ad esempio, il progetto open source è la soluzione perfetta per i software di Online Banking grazie al concetto di tran­sa­zio­ne integrata e al supporto di MVCC (Mul­ti­ver­sion Con­cur­ren­cy Control) per pre­sta­zio­ni ef­fi­cien­ti di accesso si­mul­ta­neo.

Anche i programmi di analisi come Matlab o R si ar­mo­niz­za­no con il database, motivo per cui Post­gre­SQL viene spesso uti­liz­za­to in com­bi­na­zio­ne con questi programmi. Grazie all’esten­sio­ne PostGIS, che fornisce centinaia di funzioni per lavorare con i dati geo­spa­zia­li, Postgres convince anche quando lavora con i dati geo­spa­zia­li e i dati geo­gra­fi­ci.

PosgreSQL è richiesto anche come soluzione per progetti web: il sistema re­la­zio­na­le a oggetti funziona con vari framework moderni come Django, Node.js o Ruby on Rails e supporta i classici linguaggi web come PHP. Inoltre, grazie al supporto per la replica sincrona e asincrona, i dati ar­chi­via­ti vengono fa­cil­men­te di­stri­bui­ti tra più server per garantire un’elevata af­fi­da­bi­li­tà e tempi di accesso minimi ai dati critici.

N.B.

Il forte supporto di JSON rende inoltre Post­gre­SQL un’ec­cel­len­te soluzione di database per scalare i workload NoSQL.

Come si installa Post­gre­SQL

Se si desidera uti­liz­za­re Postgres per il proprio progetto, è possibile in­stal­la­re il sistema di gestione del database au­to­no­ma­men­te in pochi passaggi senza dover ottenere una licenza o simili. Nel portale per i download del sito ufficiale di Post­gre­SQL sono di­spo­ni­bi­li a questo scopo i file binari e i col­le­ga­men­ti ai re­po­si­to­ry dei pacchetti sorgente per BSD, Linux, macOS, Solaris e Windows, che si possono in­stal­la­re e uti­liz­za­re gra­tui­ta­men­te come parte della licenza open source. Per questa ope­ra­zio­ne non sono necessari diritti di root: per l’ese­cu­zio­ne sono suf­fi­cien­ti i diritti di am­mi­ni­stra­to­re. A titolo di esempio i suc­ces­si­vi due paragrafi vi mostrano come funziona l’in­stal­la­zio­ne di Post­gre­SQL su Linux (Ubuntu 17.10) e Windows.

In­stal­la­re Post­gre­SQL su Linux (Ubuntu 17.10)

Il re­po­si­to­ry apt di Postgres supporta uf­fi­cial­men­te le versioni LTS di Ubuntu (come da 14.04) e alcune altre, come Ubuntu 17.04. Inoltre i pacchetti di origine spesso fun­zio­na­no anche in altre versioni. Tuttavia il team di Post­gre­SQL rac­co­man­da di uti­liz­za­re la variante LTS più ag­gior­na­ta, in modo che gli utenti possano uti­liz­za­re al meglio il sistema di gestione del database a lungo termine. Poiché i pacchetti in Ubuntu sono già inclusi nel re­po­si­to­ry standard, possono essere fa­cil­men­te in­stal­la­ti con il gestore di pacchetti apt:

sudo apt-get update
sudo apt-get install postgresql postgresql-contrib

Con questo comando viene in­stal­la­to Post­gre­SQL e il software crea au­to­ma­ti­ca­men­te l’utente Linux con il nome “postgres” per l’accesso al database. Per motivi di sicurezza questo dovrebbe essere usato solo per lavorare con il database. Inoltre si consiglia come primo passo di fornire una password a questo profilo (non ci sono password pre­de­fi­ni­te). Per farlo basta sem­pli­ce­men­te inserire il seguente comando e ripetere due volte la password scelta:

sudo passwd postgres

Pa­ral­le­la­men­te all’utente “postgres” di Linux esiste anche l’utente del database con lo stesso nome, che è ne­ces­sa­rio per l’am­mi­ni­stra­zio­ne del database e dovrebbe essere anch’esso dotato di una password sicura. Per farlo basta scrivere il seguente comando (dove trovate “nuova password” dovete appunto inserire la vostra password):

su - postgres
psql -d template1 -c "ALTER USER postgres WITH PASSWORD 'nuova password';"

Per ve­ri­fi­ca­re se l’in­stal­la­zio­ne abbia avuto successo, è ne­ces­sa­rio creare un database di test (qui chiamato testdb) con l’account Linux “postgres” e testarlo con il client terminal psql:

su - postgres
createdb testdb
psql testdb

Nel terminal si vede questo output della shell del client psql, che può essere uti­liz­za­to con qualsiasi comando SQL.

In­stal­la­re Post­gre­SQL su Windows

L’in­stal­la­zio­ne di Postgres su di­spo­si­ti­vi con sistema operativo Windows è semplice con l’in­te­rat­ti­vo programma di in­stal­la­zio­ne cer­ti­fi­ca­to En­ter­pri­seDB: l’as­si­sten­te gratuito di in­stal­la­zio­ne del pro­dut­to­re del software, che offre strumenti ag­giun­ti­vi e supporto com­mer­cia­le per Post­gre­SQL, è a di­spo­si­zio­ne per il download sul sito dell’azienda|en­ter­pri­sedb.com: download center. Basta se­le­zio­na­re la versione de­si­de­ra­ta del sistema di gestione del database e la piat­ta­for­ma di de­sti­na­zio­ne e poi cliccare su “DOWNLOAD NOW”.

Il programma di in­stal­la­zio­ne scaricato può essere avviato facendo doppio clic e in­stal­lan­do nel primo passaggio il compiler di Microsoft Visual C++, se non è ancora impostato sul sistema. In seguito si sceglie il percorso per Post­gre­SQL e si ha la pos­si­bi­li­tà di escludere singoli com­po­nen­ti del pacchetto di in­stal­la­zio­ne. In ogni caso sono necessari il server Post­gre­SQL e gli strumenti da riga di comando: il client grafico pgAdmin e lo stack builder (per download semplici e in­stal­la­zio­ne di esten­sio­ni) non sono ob­bli­ga­to­ri, ma rendono molto più facile lavorare con il sistema di gestione del database.

Se è stata spe­ci­fi­ca­ta anche la posizione per i dati, la password per il profilo di am­mi­ni­stra­to­re del database “postgres” è ancora in sospeso. Le im­po­sta­zio­ni pre­de­fi­ni­te di porta e lo­ca­liz­za­zio­ne possono essere mantenute invariate prima di iniziare l’in­stal­la­zio­ne nell’ultimo passaggio.

Una volta com­ple­ta­ta l’in­stal­la­zio­ne, è possibile stabilire una con­nes­sio­ne al server Post­gre­SQL in pochi passaggi tramite l’in­ter­fac­cia utente pgAdmin (se in­stal­la­ta). Per fare ciò fate clic con il tasto destro del mouse sulla versione Postgres con­fi­gu­ra­ta nell’elenco dei server e se­le­zio­na­te “Connect server”.

Dopo aver inserito la password pre­ce­den­te­men­te assegnata per l’account am­mi­ni­stra­to­re “postgres”, il client avvia la con­nes­sio­ne.

Vantaggi e svantaggi di Post­gre­SQL a confronto

Vantaggi Svantaggi
Open Source Non diĀ­spoĀ­niĀ­biĀ­le di default per tutti gli host
Altamente espanĀ­diĀ­biĀ­le DoĀ­cuĀ­menĀ­taĀ­zioĀ­ne da ampliare e soltanto in lingua inglese
In gran parte conforme agli standard SQL VelocitĆ  di lettura comĀ­paĀ­raĀ­tiĀ­vaĀ­menĀ­te bassa
PosĀ­siĀ­biĀ­liĀ­tĆ  di elaborare tipi di dati complessi (ad es. geodati) Ā 
Ricerca sul testo completo flesĀ­siĀ­biĀ­le Ā 
PosĀ­siĀ­biĀ­liĀ­tĆ  di creare proprie funzioni, trigger, tipi di dati, etc Ā 
Buon supporto di linguaggi (Python, Java, Perl, PHP, C, C++ etc.) Ā 
Supporta JSON Ā 
MulĀ­tiĀ­piatĀ­taĀ­forĀ­ma Ā 
Vai al menu prin­ci­pa­le