JSONB e JSON: quando usare ciascuno
Scelga tra JSON (testuale, conserva gli spazi) e JSONB (binario, indicizzabile, con chiavi duplicate rimosse) per l’archiviazione più adatta.
JSONB e JSON: quando usare ciascuno è una lezione SQL Academy gratuita su CoddyKit. Questa è la lezione 1 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento SQL Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso SQL Academy include 4 lezioni in totale.
I due tipi JSON in PostgreSQL
JSON— memorizza il testo esatto fornitoJSONB— formato binario scomposto, con chiavi deduplicate e indicizzabile
JSON: memorizzazione testuale
JSON conserva gli spazi, l'ordine delle chiavi e le chiavi duplicate. Viene analizzato nuovamente a ogni lettura. Non supporta l'indicizzazione GIN. Per il nuovo codice è quasi mai la scelta giusta.
INSERT INTO docs (data) VALUES ('{"a": 1, "a": 2}'::JSON);
SELECT data->'a' FROM docs; -- whatever the parser picksJSONB: binario e indicizzabile
JSONB:
- Memorizzato in forma scomposta → non deve essere analizzato nuovamente in lettura
- Le chiavi duplicate vengono accorpate (vince l'ultima)
- L'ordine delle chiavi non viene conservato
- Supporta l'indicizzazione GIN
- Supporta operatori avanzati per i percorsi
Esempio JSONB
Una semplice tabella degli eventi:
CREATE TABLE events (
id BIGSERIAL PRIMARY KEY,
ts TIMESTAMPTZ NOT NULL DEFAULT NOW(),
data JSONB NOT NULL
);
INSERT INTO events (data) VALUES
('{"type":"login","user_id":42,"ip":"1.2.3.4"}');Operatori per i percorsi
JSONB offre operatori avanzati (trattati nella lezione successiva):
SELECT data->'user_id' FROM events; -- → JSONB
SELECT data->>'user_id' FROM events; -- → TEXT
SELECT data #>> '{user,name}' FROM events; -- nested text pathContenimento
L'operatore JSONB più utile: @> (contiene).
SELECT * FROM events WHERE data @> '{"type":"login"}';
-- Combined with a GIN index, this is fast even on billions of rows.Uguaglianza di JSONB
Due valori JSONB sono uguali se il loro contenuto corrisponde: l'ordine delle chiavi non è rilevante:
SELECT '{"a":1,"b":2}'::JSONB = '{"b":2,"a":1}'::JSONB; -- TRUEConversione tra i tipi
Eseguire conversioni liberamente:
SELECT '{"a":1}'::JSONB->'a'; -- 1 (as JSONB)
SELECT ('{"a":1}'::JSONB)->>'a'; -- '1' (as TEXT)
SELECT ('{"a":1}'::JSONB)->'a'::INT; -- 1 (as INT after extraction)Quando NON usare JSONB
Se i dati hanno una struttura fissa, usare colonne reali:
- Query più veloci (non è necessario analizzare un documento per ogni riga)
- Tipi e vincoli rigorosi
- Memorizzazione più compatta
- Statistiche migliori
JSONB è ideale quando la struttura varia o cambia rapidamente.
Modellazione ibrida
Una buona pratica: colonne strutturate per i campi stabili, JSONB per gli elementi variabili:
CREATE TABLE events (
id BIGSERIAL PRIMARY KEY,
ts TIMESTAMPTZ NOT NULL,
event_type TEXT NOT NULL,
user_id BIGINT,
extra JSONB NOT NULL DEFAULT '{}'::JSONB
);Convalida
JSONB memorizza qualsiasi JSON valido. Per applicare vincoli strutturali, usare vincoli CHECK oppure applicare lo schema a livello applicativo:
ALTER TABLE events
ADD CONSTRAINT data_has_type CHECK (data ? 'type');Riepilogo
JSONB > JSON per quasi tutti i casi in produzione.
- JSONB: binario, indicizzato, percorsi veloci
- JSON: solo conversione avanti e indietro del testo
- Usare JSONB per strutture variabili e colonne reali per strutture fisse
Verifica rapida
Si sta progettando una nuova tabella per memorizzare documenti JSON caricati dagli utenti e interrogarli in base al contenuto. JSON o JSONB?
Domande Frequenti
La lezione «JSONB e JSON: quando usare ciascuno» è gratuita?
Sì — il testo completo di «JSONB e JSON: quando usare ciascuno» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso SQL Academy, passa a CoddyKit PRO. Il corso SQL Academy include 4 lezioni in totale.
Cosa imparerò in «JSONB e JSON: quando usare ciascuno»?
Scelga tra JSON (testuale, conserva gli spazi) e JSONB (binario, indicizzabile, con chiavi duplicate rimosse) per l’archiviazione più adatta. Eserciti SQL Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.
Ho bisogno di esperienza per iniziare SQL Academy?
Non è richiesta alcuna esperienza precedente. SQL Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 1 di 4.
Quanto tempo richiede la lezione «JSONB e JSON: quando usare ciascuno»?
La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.
Posso scrivere ed eseguire codice in questa lezione SQL Academy?
Sì. Ogni lezione SQL Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.
Tutte le lezioni di questo corso
- JSONB e JSON: quando usare ciascuno
- Operatori per i percorsi: -> ->> @>
- Indicizzare JSONB con GIN
- Modellazione: quando JSONB supera la normalizzazione