Postgres JSONB e Django: quando conviene davvero
Una guida pratica all'uso di JSONB in Django: i casi d'uso che lo giustificano, gli indici GIN da aggiungere, e quando invece è meglio una colonna relazionale.
JSONB è una delle feature di Postgres più amate (e più abusate). In
questo tutorial vediamo quando ha davvero senso usarlo da Django, e
quando invece introduce solo dolore.
Tre casi d'uso vincenti:
1. Configurazione utente flessibile (campi che cambiano frequentemente
e di cui non vuoi fare migrate ogni due settimane).
2. Payload di webhook esterni che evolvono (es. Shopify Orders API):
conservi tutto in JSONB, estrai con `model.data['order_id']` e fai
indici GIN sui campi che query frequentemente.
3. Dati strutturati ma sparsi: report con migliaia di campi opzionali
(vedi i nostri service_reports), dove relazionalizzare ogni voce
sarebbe assurdo.
Quando invece NO: se i campi del JSON sono sempre presenti e li query
in JOIN o GROUP BY, una colonna vera è 10x più veloce. Il typo nei
nomi di chiave non è un errore di compile time, e questo ti morde.
