🧚 Ascolta! Beekeeper Studio è una GUI per database veloce, moderna e open source Scarica
24 agosto 2025 Di Matthew Rathbone

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_text e jsonb_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.

La versione Linux di Beekeeper è completa al 100%, senza tagli e senza compromessi sulle funzionalità.

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."
— Alex K., Database Developer
★★★★★
"Ho provato tante GUI per database, ma Beekeeper trova il perfetto equilibrio tra funzionalità e semplicità. Funziona e basta."
— Sarah M., Full Stack Engineer

Pronto a migliorare il tuo workflow SQL?

download Scarica gratis