PostgreSQL 9.2 ha introdotto il supporto alla memorizzazione all’interno del database di dati di tipo JSON (JavaScript Object Notation), formato ideato per lo scambio di dati in applicazioni client-server. PostgreSQL 9.3 introduce importanti funzioni native per la creazione e la manipolazione di dati JSON, oltre a operatori per l’accesso a informazioni contenute in dati JSON.
Per quanto riguarda la generazione di valori JSON, PostgreSQL 9.3 introduce due funzioni:
to_json(anyelement)
: converte un valore in JSON, utilizzando il casting oppure la rappresentazione testuale a seconda del tipo di datojson_agg(record)
: aggrega un set di record come un array di oggetti JSONIl seguente esempio mostra la funzione to_json
, visualizzando la serie dei primi 10 numeri interi e il rispettivo quadrato tramite una query WITH
:
WITH a AS ( SELECT n, n^2 AS q FROM generate_series(1, 10) n ) SELECT to_json(a) AS json FROM a; |
Il risultato è un insieme di record (10 per la precisione), ciascuno rappresentato da un oggetto JSON composto da due membri con chiave n e q:
json ------------------ {"n":1,"q":1} {"n":2,"q":4} {"n":3,"q":9} {"n":4,"q":16} {"n":5,"q":25} {"n":6,"q":36} {"n":7,"q":49} {"n":8,"q":64} {"n":9,"q":81} {"n":10,"q":100} (10 rows)
Il successivo esempio applica la funzione aggregata json_agg
, alla query precedente:
WITH a AS ( SELECT n, n^2 AS q FROM generate_series(1, 10) n ) SELECT json_agg(a) AS json FROM a; |
Il risultato è una rappresentazione sintetica di un singolo valore JSON composto da un array di oggetti JSON con caratteristiche simili al precedente esempio:
json -------------------- [{"n":1,"q":1}, + {"n":2,"q":4}, + {"n":3,"q":9}, + {"n":4,"q":16}, + {"n":5,"q":25}, + {"n":6,"q":36}, + {"n":7,"q":49}, + {"n":8,"q":64}, + {"n":9,"q":81}, + {"n":10,"q":100}] (1 row)
Inutile sottolineare l’impatto di queste nuove funzionalità nello sviluppo, in particolare, di applicazioni web e mobile che memorizzano e recuperano dati JSON direttamente da PostgreSQL e le veicolano, ad esempio, con JQuery. Al prossimo articolo sulle novità di PostgreSQL 9.3!
This Post Has 0 Comments