Il tipo di dato JSONB di PostgreSQL semplifica la gestione dei dati JSON nel tuo database. Le sue capacità vanno oltre la semplice memorizzazione: offre funzioni sofisticate che permettono di manipolare e interrogare i dati JSON in modo dettagliato. In questa guida esploreremo queste funzioni JSONB con esempi pratici, per aiutarti a sfruttare tutta la potenza di PostgreSQL nella gestione dei dati JSON.
Per una panoramica più ampia sull'uso di JSON in PostgreSQL, che copre sia il tipo json sia jsonb, dai un'occhiata alla nostra guida completa alle funzioni JSON di PostgreSQL.
Introduzione a JSONB
Il tipo di dato jsonb di PostgreSQL è un formato binario per memorizzare dati JSON. È molto efficiente e offre funzionalità di indicizzazione che json non ha. In generale JSONB è preferibile per la sua flessibilità e le sue prestazioni.
Creare una tabella con JSONB
Iniziamo creando una tabella che usa il tipo di dato jsonb:
CREATE TABLE users (
id SERIAL PRIMARY KEY,
data JSONB
);
Inserire dati JSONB
Inserisci i dati JSONB usando la sintassi JSON standard. PostgreSQL valida automaticamente il JSON e lo converte in formato binario:
INSERT INTO users (data) VALUES
('{"name": "John Doe", "email": "john@example.com", "age": 30}'),
('{"name": "Jane Doe", "email": "jane@example.com", "age": 25}'),
('{"name": "Alice Smith", "email": "alice@example.com", "age": 28, "address": {"city": "New York", "state": "NY"}}');
Accedere ai valori JSONB
PostgreSQL mette a disposizione diversi operatori per esplorare i valori JSONB.
Estrarre un oggetto JSONB
Per accedere ai valori JSONB annidati, usa gli operatori -> e ->>. L'operatore -> restituisce i dati in formato JSON, mentre ->> restituisce testo.
SELECT data->'name' AS name, data->>'email' AS email FROM users;
Output previsto:
name | email
---------+--------------------
"John Doe" | john@example.com
"Jane Doe" | jane@example.com
Estrarre valori JSONB annidati
Per strutture JSON più profonde, concatena gli operatori. L'operatore ? verifica prima l'esistenza della chiave:
SELECT
data->>'name' AS name,
data->'address'->>'city' AS city
FROM users
WHERE data ? 'address';
Output previsto:
name | city
-------------|----------
Alice Smith | New York
Funzioni JSONB
PostgreSQL include una serie di funzioni JSONB che vanno oltre la semplice estrazione di valori.
Verificare l'esistenza di una chiave
L'operatore ? verifica se una chiave esiste:
SELECT data ? 'age' AS has_age FROM users;
Output previsto:
has_age
---------
t
t
t
Verificare il contenimento
Usa l'operatore @> per verificare se un oggetto JSON ne contiene un altro:
SELECT * FROM users WHERE data @> '{"age": 30}';
Output previsto:
id | data
----+---------------------------------------------
1 | {"name": "John Doe", "email": "john@example.com", "age": 30}
Concatenazione di JSONB
Combina colonne o valori JSONB con l'operatore ||:
SELECT data || '{"verified": false}' AS updated_data FROM users;
Output previsto:
updated_data
-------------------------------------------------------------------
{"age": 30, "name": "John Doe", "email": "john@example.com", "verified": false}
{"age": 25, "name": "Jane Doe", "email": "jane@example.com", "verified": false}
{"age": 28, "name": "Alice Smith", "email": "alice@example.com", "address": {"city": "New York", "state": "NY"}, "verified": false}
Eliminare una chiave da JSONB
Rimuovi una chiave con l'operatore -:
SELECT data - 'age' AS partial_data FROM users;
Output previsto:
partial_data
--------------------------------------------------------------------
{"name": "John Doe", "email": "john@example.com"}
{"name": "Jane Doe", "email": "jane@example.com"}
{"name": "Alice Smith", "email": "alice@example.com", "address": {"city": "New York", "state": "NY"}}
Indicizzazione JSONB
Per migliorare le prestazioni delle query sui dati JSONB, usa gli indici.
Creare un indice JSONB
Un indice GIN è ideale per i tipi JSONB:
CREATE INDEX idx_users_data ON users USING GIN (data);
Questo indice velocizza operazioni come la ricerca dell'esistenza di chiavi JSON o di coppie chiave-valore.
Funzioni JSONB avanzate
PostgreSQL offre funzioni aggiuntive per operazioni più complesse:
-- Convert JSONB to key-value pairs
SELECT jsonb_each_text(data) FROM users LIMIT 1;
-- Get all keys from a JSONB object
SELECT jsonb_object_keys(data) FROM users LIMIT 1;
-- Update a nested value using jsonb_set
UPDATE users
SET data = jsonb_set(data, '{address,zip}', '"10001"')
WHERE data ? 'address';
Conclusione
Le funzioni JSONB di PostgreSQL offrono opzioni potenti e flessibili per lavorare con i dati JSON nel tuo database. I principali vantaggi sono:
- Prestazioni: formato di memorizzazione binario con indicizzazione efficiente
-
Operatori ricchi: estrazione e manipolazione semplici con
->,->>,@>,? -
Funzioni avanzate: operazioni complesse come
jsonb_set,jsonb_each_textejsonb_array_elements - Supporto all'indicizzazione: indici GIN per query veloci
Queste capacità rendono PostgreSQL una scelta eccellente per le applicazioni che devono memorizzare e interrogare dati JSON semi-strutturati insieme ai tradizionali dati relazionali. Padroneggiando queste funzioni JSONB, potrai creare applicazioni di database più flessibili ed efficienti.
Beekeeper Studio è una GUI per database gratuita & open source
Il miglior strumento per query & editor SQL che abbia mai usato. Offre tutto ciò che mi serve per gestire il mio database. - ⭐⭐⭐⭐⭐ Mit
Beekeeper Studio è veloce, intuitivo e facile da usare. Beekeeper supporta tantissimi database e funziona alla grande su Windows, Mac e Linux.
Cosa dicono gli utenti di Beekeeper Studio
"Beekeeper Studio ha sostituito completamente il mio vecchio workflow SQL. È veloce, intuitivo e rende di nuovo piacevole lavorare con i database."
"Ho provato tante GUI per database, ma Beekeeper trova il perfetto equilibrio tra funzionalità e semplicità. Funziona e basta."