PostgreSQL: il sistema di gestione del database relazionale a oggetti
Se oltre ai caratteri alfanumerici (lettere, numeri, caratteri speciali) occorre gestire anche tipi di dati complessi o contenuti multimediali, ci si rende conto che i classici sistemi di gestione del database relazionali cozzano contro i propri limiti. Tuttavia i database relazionali a oggetti o i sistemi di gestione del database che ampliano il modello tradizionale includendo approcci orientati agli oggetti forniscono la risposta adeguata a questo problema: il mapping relazionale a oggetti (object-relational mapping in inglese) consente loro di utilizzare oggetti basati su linguaggi di programmazione orientati a oggetti anche nei sistemi relazionali. Una delle soluzioni più popolari e al contempo antiche in questo contesto è il database open source PostgreSQL, noto anche come Postgres.
Che cos’è PostgreSQL?
PostgreSQL ha alle proprie spalle oltre 30 anni di sviluppo. Il sistema di gestione del database relazionale a oggetti (ORDBMS) ha le proprie radici nel progetto POSTGRES dell’Università della California a Berkeley. È stato avviato nel 1986 sotto la guida di Michael Stonebraker e sponsorizzato dalla Defence Advanced Research Project Agency (DARPA) e dalla National Science Foundation (NSF). Nel 1994 gli studenti Andrew Yu e Jolly Chen estesero il codice di base con un interpreter SQL e pubblicarono questa nuova versione dal 30 al 50 percento più veloce con il nome di Postgres95 come soluzione open source (con una licenza propria che assomiglia alle licenze BSD e MIT). Due anni dopo l’applicazione per database, con la versione 6.0, ha preso il nome di PostgreSQL, utilizzato ancora oggi.
Accanto al nuovo nome PostgreSQL viene ancora utilizzato anche il nome originario Postgres (anche se oggi viene raramente scritto in maiuscolo). Oltre alle motivazioni prettamente sentimentali, l’utilizzo del vecchio nome è spesso dovuto alla sua maggiore semplicità.
Il progetto POSTGRES ha svolto un prezioso lavoro pionieristico e ha sviluppato numerosi concetti che sono stati introdotti successivamente in altri sistemi di database (principalmente commerciali). Pertanto PostgreSQL non si distingue solo come database conforme a SQL, ma anche attraverso le seguenti moderne feature:
- Possibilità di domande complesse
- Chiavi esterne (foreign keys) per il collegamento di dati da due tabelle
- Trigger che vengono attivati automaticamente in ingresso e controllano, confermano, modificano, eliminano o in alternativa inseriscono i dati di riferimento
- Visualizzazioni aggiornabili
- Concetto di transazione completo
- Multiversion Concurrency Control (MVCC) per eseguire in modo efficiente l’accesso simultaneo al database
Inoltre gli utenti possono modificare ed estendere notevolmente PostgreSQL grazie alla licenza gratuita, aggiungendo ad esempio nuovi tipi di dati, funzioni, operatori, metodi di indicizzazione o linguaggi procedurali (linguaggi di programmazione per la scrittura di funzioni e trigger).
Postgres: dati di base e requisiti di sistema
La flessibilità di PostgreSQL non è solo evidente in termini di funzionalità, espandibilità e personalizzazione: il database offre buon gioco anche per l’installazione di software e hardware. Ad esempio Postgres è incluso nella maggior parte delle distribuzioni UNIX/Linux ed è stato fornito da Apple a partire da Mac OS X Lion (10.7) come database predefinito.
L’unico requisito è che sia installata una versione gmake aggiornata (3.80 o successiva), già inclusa nei file binari finiti. Grazie ad appositi pacchetti di installazione si possono selezionare come piattaforma per il sistema anche i sistemi operativi Windows. La potenza di calcolo e la capacità di archiviazione delle richieste dipendono solo dalle dimensioni del sistema di database pianificato: il software open source in sé richiede a malapena 20 MB.
Il fatto che nella pratica si è più limitati dalle proprie capacità di archiviazione piuttosto che dai limiti di PostgreSQL si può facilmente desumere dai seguenti dati chiave del database relazionale a oggetti:
Dimensione massima del database | Illimitata |
Dimensione massima di una tabella | 32 Terabyte |
Dimensione massima di un record | 1,6 Terabyte |
Dimensione 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 | Illimitato |
Numero massimo di indici | Illimitato |
Come funziona PostgreSQL?
Postgres si basa sul tipico modello client-server: il componente centrale del server con il nome “postmaster” gestisce tutti i file di database e tutte le connessioni stabilite con il server di database per la comunicazione (input e output). Gli utenti necessitano solo di un adeguato programma client per la connessione, per cui il pacchetto software PostgreSQL con psql ha già integrato una soluzione nativa per il funzionamento tramite la riga di comando o il terminale.
In alternativa è possibile passare a varie applicazioni con interfacce grafiche, come pgAdmin o phpPgAdmin che si può installare e utilizzare opzionalmente. Per i siti web interattivi il web server normalmente assume il ruolo del client.
Molte distribuzioni Linux forniscono un proprio client grafico Postgres con pgAccess.
A quali progetti è adatto PostgreSQL?
Come sistema di gestione di database collaudato ed estremamente flessibile, Postgres è utilizzato in numerosi settori e scenari. Il database relazionale a oggetti si distingue come base di prima classe per gestire in sicurezza una vasta gamma di applicazioni. Ad esempio, il progetto open source è la soluzione perfetta per i software di Online Banking grazie al concetto di transazione integrata e al supporto di MVCC (Multiversion Concurrency Control) per prestazioni efficienti di accesso simultaneo.
Anche i programmi di analisi come Matlab o R si armonizzano con il database, motivo per cui PostgreSQL viene spesso utilizzato in combinazione con questi programmi. Grazie all’estensione PostGIS, che fornisce centinaia di funzioni per lavorare con i dati geospaziali, Postgres convince anche quando lavora con i dati geospaziali e i dati geografici.
PosgreSQL è richiesto anche come soluzione per progetti web: il sistema relazionale 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 archiviati vengono facilmente distribuiti tra più server per garantire un’elevata affidabilità e tempi di accesso minimi ai dati critici.
Il forte supporto di JSON rende inoltre PostgreSQL un’eccellente soluzione di database per scalare i workload NoSQL.
Come si installa PostgreSQL
Se si desidera utilizzare Postgres per il proprio progetto, è possibile installare il sistema di gestione del database autonomamente in pochi passaggi senza dover ottenere una licenza o simili. Nel portale per i download del sito ufficiale di PostgreSQL sono disponibili a questo scopo i file binari e i collegamenti ai repository dei pacchetti sorgente per BSD, Linux, macOS, Solaris e Windows, che si possono installare e utilizzare gratuitamente come parte della licenza open source. Per questa operazione non sono necessari diritti di root: per l’esecuzione sono sufficienti i diritti di amministratore. A titolo di esempio i successivi due paragrafi vi mostrano come funziona l’installazione di PostgreSQL su Linux (Ubuntu 17.10) e Windows.
Installare PostgreSQL su Linux (Ubuntu 17.10)
Il repository apt di Postgres supporta ufficialmente le versioni LTS di Ubuntu (come da 14.04) e alcune altre, come Ubuntu 17.04. Inoltre i pacchetti di origine spesso funzionano anche in altre versioni. Tuttavia il team di PostgreSQL raccomanda di utilizzare la variante LTS più aggiornata, in modo che gli utenti possano utilizzare al meglio il sistema di gestione del database a lungo termine. Poiché i pacchetti in Ubuntu sono già inclusi nel repository standard, possono essere facilmente installati con il gestore di pacchetti apt:
sudo apt-get update
sudo apt-get install postgresql postgresql-contrib
Con questo comando viene installato PostgreSQL e il software crea automaticamente 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 predefinite). Per farlo basta semplicemente inserire il seguente comando e ripetere due volte la password scelta:
sudo passwd postgres
Parallelamente all’utente “postgres” di Linux esiste anche l’utente del database con lo stesso nome, che è necessario per l’amministrazione 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 verificare se l’installazione abbia avuto successo, è necessario 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 utilizzato con qualsiasi comando SQL.
Installare PostgreSQL su Windows
L’installazione di Postgres su dispositivi con sistema operativo Windows è semplice con l’interattivo programma di installazione certificato EnterpriseDB: l’assistente gratuito di installazione del produttore del software, che offre strumenti aggiuntivi e supporto commerciale per PostgreSQL, è a disposizione per il download sul sito dell’azienda|enterprisedb.com: download center. Basta selezionare la versione desiderata del sistema di gestione del database e la piattaforma di destinazione e poi cliccare su “DOWNLOAD NOW”.
Il programma di installazione scaricato può essere avviato facendo doppio clic e installando nel primo passaggio il compiler di Microsoft Visual C++, se non è ancora impostato sul sistema. In seguito si sceglie il percorso per PostgreSQL e si ha la possibilità di escludere singoli componenti del pacchetto di installazione. In ogni caso sono necessari il server PostgreSQL e gli strumenti da riga di comando: il client grafico pgAdmin e lo stack builder (per download semplici e installazione di estensioni) non sono obbligatori, ma rendono molto più facile lavorare con il sistema di gestione del database.
Se è stata specificata anche la posizione per i dati, la password per il profilo di amministratore del database “postgres” è ancora in sospeso. Le impostazioni predefinite di porta e localizzazione possono essere mantenute invariate prima di iniziare l’installazione nell’ultimo passaggio.
Una volta completata l’installazione, è possibile stabilire una connessione al server PostgreSQL in pochi passaggi tramite l’interfaccia utente pgAdmin (se installata). Per fare ciò fate clic con il tasto destro del mouse sulla versione Postgres configurata nell’elenco dei server e selezionate “Connect server”.
Dopo aver inserito la password precedentemente assegnata per l’account amministratore “postgres”, il client avvia la connessione.
Vantaggi e svantaggi di PostgreSQL a confronto
Vantaggi | Svantaggi |
Open Source | Non disponibile di default per tutti gli host |
Altamente espandibile | Documentazione da ampliare e soltanto in lingua inglese |
In gran parte conforme agli standard SQL | Velocità di lettura comparativamente bassa |
Possibilità di elaborare tipi di dati complessi (ad es. geodati) | |
Ricerca sul testo completo flessibile | |
Possibilità di creare proprie funzioni, trigger, tipi di dati, etc | |
Buon supporto di linguaggi (Python, Java, Perl, PHP, C, C++ etc.) | |
Supporta JSON | |
Multipiattaforma |