NoSQL con PostgreSQL

28 novembre 2014

Il mondo attuale, affollato di web application e social network, produce quantità sconfinate di dati ad una velocità fino a poco tempo fa inimmaginabile. La priorità delle tecnologie odierne si è quindi spostata verso lo sviluppo di strumenti per immagazzinare ed analizzare queste informazioni più velocemente possibile. Una delle questioni da affrontare per risolvere questo problema è l’estrema eterogeneità dei dati, che fatica ad essere imprigionata nelle rigide strutture su cui si basano i database relazionali: testi, immagini, video, audio ed ogni altro contenuto che le moderne interfacce web e mobile riescono ad inviare ai server.

Il movimento NoSQL prende piede nel 2009 per proporre alternative in grado di superare i limiti dei DBMS, relazionali proponendo forme di archiviazione più flessibili e scalabili.

Il mondo del data storage appare da allora diviso in due grandi emisferi: da un lato l’archiviazione relazionale con prodotti open source e proprietari (MySQL, Oracle, SQL Server, eccetera…), dall’altro quello NoSQL con basi di dati non strutturate e totalmente rivolte ai contenuti (MongoDB, OrientDB, eccetera).

Nonostante ciò, esistono situazioni in cui entrambi gli approcci possono confluire ed integrarsi, come le soluzioni offerte da PostgreSQL, un gestore di database molto interessante.

Questo articolo spiega come questo DBMS riesca a gestire dati in stile NoSQL e relazionali, e sia in grado di farlo anche in contemporanea. Vedremo i tipi di dato più interessanti, ed alcuni esempi di utilizzo.

Evoluzione di PostgreSQL: dalle origini al NoSQL

PostgreSQL è un progetto open source con una lunga storia alle spalle. Fondato all’università di Berkley (California), con il nome di Ingres, alla fine degli anni ‘70, venne interrotto varie volte per poi resuscitare sempre in nuovi progetti. Ottenne dapprima il nome di Postgres (abbreviazione di “post-Ingres”) e, solo a metà anni ‘90, quello di PostgreSQL, quando venne dotato di un motore per l’esecuzione di comandi SQL.

È attualmente considerato un ORDBMS (Object Relational DBMS) in quanto racchiude ancora in sé sia la tradizione delle basi di dati relazionali, sia quella della programmazione orientata agli oggetti. È soprattutto quest’ultima, con il suo principio di ereditarietà, a conferire a PostgreSQL una grande flessibilità nella definizione dei dati.

Due tipi di dato in particolare, oggi in dotazione a PostgreSQL, permettono di gestire informazioni NoSQL: JSON e HSTORE.

Il primo dei due si avvicina molto alla filosofia dei DBMS NoSQL basati sui documenti, il cui esponente più famoso è MongoDB. Il secondo richiama i database di tipo chiave/valore, che archiviano dati etichettandoli con degli identificativi univoci.

Preparazione dell’ambiente di lavoro

L’ambiente di lavoro che utilizzeremo nel seguito di questo articolo non richiede altro che un’installazione base di PostgreSQL. Si tratta di un prodottomultipiattaforma, disponibile pertanto per qualunque sistema operativo. Il download di sorgenti ed eseguibili può essere effettuato dal sito ufficiale.

Nel prosieguo dell’articolo, faremo riferimento ad un’installazione di PostgreSQL su sistema Ubuntu Server versione 14.04. Tale impianto si può ottenere comodamente con i pacchetti precompilati mediante il seguente comando:

apt-get install postgresql postgresql-contrib

Conclusa l’installazione, su Ubuntu sarà configurato un utente, denominato postgres, che, senza entrare nel merito della gestione di permessi e ruoli del DBMS, utilizzeremo per la gestione di un database.

Per prima cosa, quindi, dopo avere avuto accesso al sistema Linux con le proprie credenziali, ci “immedesimeremo” nell’utente postgres:

sudo su - postgres

Potremo creare così un database per la sperimentazione usando il comando createdb, reso disponibile contestualmente all’installazione di PostgreSQL.

Creiamone quindi uno, che chiameremo example, utilizzando la seguente istruzione:

createdb example

Quindi accediamo al database appena creato con:

psql -d example

Il comando psql è il client da terminale che dà accesso ad una console testuale di PostgreSQL in cui si possono usare liberamente direttive SQL o alcuni comandi. I seguenti saranno particolarmente utili:

ComandoDescrizione
\listelenca i database disponibili per il profilo utente
\dtelenca tabelle all’interno del singolo database
\zelenca tutti gli elementi interni al database, tra cui tabelle e viste
\hmostra l’aiuto in linea
\conninfofornisce informazioni sulla connessione in corso al database
\qchiude psql

Se vuoi aggiornamenti su NoSQL con PostgreSQL inserisci la tua e-mail nel box qui sotto:
 
X
Se vuoi aggiornamenti su NoSQL con PostgreSQL

inserisci la tua e-mail nel box qui sotto:

Ho letto e acconsento l'informativa sulla privacy

Acconsento al trattamento di cui al punto 3 dell'informativa sulla privacy