Durante la creazione di una tabella, avrai due opzioni per la tua colonna JSON. Tipo di dati JSON semplice e tipo di dati JSONB, entrambi hanno i loro vantaggi e svantaggi. Passeremo a ciascuno di essi, creando una tabella semplice con solo 2 colonne un ID e un valore JSON. Successivamente interrogheremo i dati dalla tabella e avremo un'idea di come gestire i dati formattati JSON all'interno di Postgres.
Tipo di dati JSON
Creazione di una tabella con tipo di dati JSON
Creiamo una semplice tabella a due colonne denominata utenti:
Crea utenti di tabelle (Qui la colonna ID funge da chiave primaria e aumenterà in modo incrementale grazie al seriale pseudotipo, quindi non dovremo preoccuparci di inserire manualmente i valori per ID mentre procediamo.
La seconda colonna è di tipo JSON ed è costretta a non essere null. Inseriamo alcune righe di dati su questa tabella, costituite da valori JSON.
Inserisci i valori degli utenti (info) (Puoi usare il tuo bellissimo/minificatore preferito per convertire i payload JSON sopra in una sola riga. Quindi puoi incollarlo a un prompt PSQL.
Seleziona * dagli utenti;Il comando Select alla fine ci ha mostrato che le righe sono state inserite correttamente nella tabella degli utenti.
Interrogazione del tipo di dati JSON
Postgres ti consente di scavare nel payload JSON stesso e di recuperare un valore particolare da esso, se lo si riferisce utilizzando il valore corrispondente. Possiamo usare l'operatore -> dopo il nome della colonna JSON, seguito dalla chiave all'interno dell'oggetto JSON. Così facendo
Ad esempio, nella tabella che abbiamo creato sopra:
Potresti aver notato le doppie citazioni nella colonna contenente e -mail. Questo perché l'operatore -> restituisce un oggetto JSON, come presente nel valore della "e -mail" chiave. Naturalmente, puoi restituire solo un testo, ma dovrai invece utilizzare l'operatore ->>.
Seleziona informazioni ->> "email" dagli utenti;La differenza tra restituire un oggetto JSON e una stringa diventa chiara una volta che iniziamo a lavorare con gli oggetti JSON nidificati all'interno di altri oggetti JSON. Ad esempio, ho scelto la chiave "PersonalDetails" per tenere intenzionalmente un altro oggetto JSON. Possiamo anche scavare in questo oggetto, se vogliamo:
Seleziona Info -> 'PersonalDetails' -> 'Gender' dagli utenti;Questo può lasciarti andare in profondità nell'oggetto JSON come vorresti. Lasciamo cadere questa tabella e creiamo una nuova (con lo stesso nome) ma con il tipo JSONB.
Tipo di dati JSONB
Tranne il fatto che durante la creazione della tabella menzioniamo il tipo di dati JSONB invece di JSON, tutto il resto sembra lo stesso.
Crea utenti di tabelle (Anche l'inserimento di dati e recupero utilizzando l'operatore -> si comporta allo stesso modo. Ciò che è cambiato è tutto sotto il cofano e evidente nelle prestazioni del tavolo. Quando si converte il testo JSON in un JSONB, Postgres in realtà trasforma i vari tipi di valore JSON in tipo Postgres nativo, quindi non tutti gli oggetti JSON validi possono essere salvati come valore JSONB valido.
Inoltre, JSONB non preserva i bianchi, l'ordine delle chiavi JSON fornita dalla dichiarazione di insert. JSONB converte effettivamente il payload in Binarie di Postgres Native, da cui il termine JSONB.
Naturalmente, l'inserimento di JSONB Datum ha un sovraccarico di prestazioni a causa di tutti questi lavori aggiuntivi che Postgres deve fare. Tuttavia, il vantaggio che ottieni è in termini di elaborazione più rapida dei dati già memorizzati, poiché l'applicazione non avrebbe la necessità di analizzare un carico utile JSON ogni volta che ne recupera uno dal database.
JSON vs JSONB
La decisione tra JSON e JSONB Sole dipende dal caso d'uso. In caso di dubbio, usa JSONB, poiché la maggior parte delle applicazioni tende ad avere operazioni di lettura più frequenti che scrivono operazioni. D'altra parte, se sei sicuro che la tua applicazione dovrebbe eseguire operazioni di scrittura più sincroni rispetto a quelle lette, potresti voler considerare JSON come un'alternativa.
Le persone che lavorano con i payload JSON e la progettazione di interfacce per l'archiviazione di Postgres trarranno immensamente da questa particolare sezione della loro documentazione ufficiale. Gli sviluppatori sono stati così gentili da fornirci l'indicizzazione JSONB e altre caratteristiche interessanti che possono essere sfruttate per migliorare le prestazioni e la semplicità dell'applicazione. Ti imploro di indagare anche questi.
Spero che tu abbia trovato questa breve introduzione della questione utile e stimolante.