• postgresql
  • jsonb
  • json
  • database

Padroneggia il tipo JSONB di PostgreSQL in un solo articolo

Impara come utilizzare il tipo JSONB di PostgreSQL per memorizzare, interrogare e manipolare efficacemente i dati JSON.

Yijun
Yijun
Developer

Nello sviluppo di applicazioni moderne, la gestione e la memorizzazione di dati non strutturati sta diventando sempre più comune. Il tipo JSONB di PostgreSQL fornisce uno strumento potente per gli sviluppatori per memorizzare ed interrogare efficacemente i dati JSON. In questo articolo, ci addentreremo nel concetto e nell'uso del tipo JSONB e ne demonstreremo le potenti funzionalità attraverso specifici esempi di codice.

Cos'è JSONB?

JSONB è un tipo di dati PostgreSQL che memorizza i dati JSON in un formato binario. A differenza del tipo JSON regolare, JSONB è più efficiente nel'interrogazione e manipolazione. Supporta una serie ricca di operatori e funzioni che semplificano la gestione dei dati JSON. Inoltre, JSONB supporta vari tipi di indici, tra cui indici B-tree, Hash, GIN e GiST, migliorando ulteriormente le prestazioni delle query.

Creazione del tipo JSONB

Creazione di una tabella con tipo JSONB

Per prima cosa, creiamo una tabella con una colonna JSONB. Supponiamo di avere una tabella prodotti per memorizzare le informazioni sui prodotti, con i dettagli del prodotto memorizzati utilizzando il tipo JSONB.

Inserimento di dati JSONB

Possiamo inserire dati JSON in un campo JSONB utilizzando un semplice comando INSERT.

Interrogazione dei dati JSONB

Estrazione di valori dai campi JSONB

Possiamo utilizzare l'operatore ->> per estrarre valori di testo da un campo JSONB. L'esempio seguente mostra come estrarre le informazioni di marca di un prodotto.

Estrazione di valori nidificati con JSONB

Possiamo utilizzare una combinazione di operatori -> e ->> per estrarre valori nidificati all'interno di una struttura JSON. L'esempio seguente mostra come estrarre le informazioni sulla CPU di un prodotto.

Estrazione di valori con percorsi JSONB

Utilizzando l'operatore #>>, possiamo estrarre valori da percorsi specifici all'interno dei dati JSON. L'esempio seguente mostra come estrarre le informazioni sulla memoria.

Utilizzo dell'operatore @> per query di contenimento

L'operatore @> verifica se un oggetto JSONB contiene un altro oggetto JSONB. L'esempio seguente mostra come interrogare i prodotti di un marchio specifico.

Modifica dei dati JSONB

Aggiornamento dei dati JSONB

Possiamo utilizzare la funzione jsonb_set per aggiornare i dati JSONB. Questa funzione aggiorna il valore in un percorso specificato. L'esempio seguente mostra come aggiornare le informazioni sulla memoria di un prodotto.

Eliminazione di campi di livello superiore nei dati JSONB

Possiamo utilizzare l'operatore - per rimuovere i campi di livello superiore dai dati JSONB. Questo operatore elimina la chiave specificata da un oggetto JSONB. L'esempio seguente mostra come rimuovere un campo di livello superiore dai dettagli del prodotto.

Eliminazione di campi nidificati nei dati JSONB

Possiamo utilizzare l'operatore #- per rimuovere elementi di percorsi specifici dai dati JSONB. Questo operatore elimina la chiave nel percorso specificato. L'esempio seguente mostra come eliminare le informazioni sulla CPU dalle specifiche del prodotto.

Query avanzate JSONB

Utilizzo di array JSONB

I dati JSONB possono includere array e possiamo utilizzare operatori relativi agli array per gestire questi dati. L'esempio seguente mostra come memorizzare e interrogare prodotti con più tag.

Nell'esempio sopra, puoi anche utilizzare l'operatore ? per controllare se un array JSONB contiene un elemento specifico:

Unire dati JSONB

Possiamo utilizzare l'operatore || per unire due oggetti JSONB. Questo operatore combina due oggetti JSONB in uno. L'esempio seguente mostra come unire nuove specifiche nei dettagli del prodotto esistente.

Aggregazione dei dati JSONB

Possiamo utilizzare funzioni di aggregazione per elaborare i dati JSONB, come conteggiare il numero di prodotti per ogni marca.

Indicizzazione JSONB e ottimizzazione delle prestazioni

Per migliorare le performance delle query con dati JSONB, possiamo creare indici su specifiche chiavi all'interno del campo JSONB. Scegliere il tipo giusto di indice è fondamentale per diverse esigenze di query.

  • Indice GIN: adatto per query complesse che coinvolgono dati multivalore, array e ricerca di testo completo.
  • Indice B-tree: adatto per interrogazioni semplici su coppie chiave-valore, interrogazioni di range e operazioni di ordinamento.

Selezionare e creare correttamente gli indici può aumentare notevolmente le prestazioni delle query sui dati JSONB.

Creazione di indice GIN

Gli indici GIN sono ideali per velocizzare le query che coinvolgono dati multivalore e array. Ad esempio, possiamo creare un indice GIN per l'array tags menzionato in precedenza per accelerare le query sugli elementi dell'array.

Creazione di indice B-tree

Per le interrogazioni semplici di coppie chiave-valore, un indice B-tree può migliorare notevolmente le prestazioni. Gli indici B-tree sono adatti per interrogazioni di range e operazioni di ordinamento. L'esempio seguente mostra come creare un indice B-tree per la chiave modello nel campo dettagli

.

Conclusione

Il tipo JSONB di PostgreSQL fornisce una soluzione potente e flessibile per gestire i dati JSON. Con l'introduzione e gli esempi in questo articolo, dovresti ora avere una comprensione completa di come utilizzare il tipo JSONB. Padronizzando queste tecniche, puoi gestire ed interrogare efficacemente i dati non strutturati, migliorando le prestazioni e la flessibilità delle tue applicazioni.