Lezioni del modulo (1/2)
Integrazione JSON e JSONB
Integrazione JSON e JSONB
PostgreSQL ha riscritto le regole dei database unendo la rassicurante e colossale natura ACID dell'SQL con la flessibilità dinamica e fluttuante tipica del NoSQL. E l'ha fatto offrendo le colonne nativamente dedicate a salvare dati JSON.
Attenzione: in postgres si consiglia di usare quasi sempre JSONB. "B" sta per Binary: i documenti JSON inseriti in queste colonne perdono la loro formattazione puramente testuale, ma ne guadagnano che possono essere validati, interrogati ad altissime prestazioni, manipolati e addirittura indicizzati con i classici INDEX B-tree o GIN.
Navigare nel JSON: l'operatore "Freccia"
Purtroppo il db `ecommerce` al momento non ha colonne JSON pure predefinite. Possiamo però creare JSON temporanei e "castarli" testualmente!
Quando si lavora con JSON, gli operatori che scendono negli oggetti e array sono -> (mantiene il dato come forma pura jsonb/json) o la sua versione "estesa" ->> (converte il dato json incontrato testualmente).
Esempio accademico se ci fosse una colonna "metadata" JSON:
-- Cerca il valore associato alla chiave info
SELECT metadata->'info' FROM users;
-- Cerca dentro info, e prendi testuale city
SELECT metadata->'info'->>'city' FROM users;Interroghiamo JSON on the fly. Proietta questo literal json `'{"user": {"name": "Mario"}}'::json` ed usa l'operatore `->` associato testualmente (`->>`) per estrarne il 'name', chiamando la colonna estratta 'user_name'.
Mostra suggerimento
Cast a ::json o ::jsonb, e usa ->'user'->>'name'.
Soluzione disponibile dopo 3 tentativi
Se passiamo un array? L'accesso ad un array in json_b in postgres avviene per INDICE (base 0). Estrai testualmente il SECONDO elemento da `'["A", "B", "C"]'::json` e chiamalo 'letter'.
Mostra suggerimento
->>1 (è a base zero!)
Soluzione disponibile dopo 3 tentativi