Som i 9.2 versjon, PostgreSQL la til en ganske grunnleggende JSON-datatype. Under omslaget er JSON-typen data tekst, med en sjekk om at oppsettet kanskje er riktig JSON-inngang som ligner på XML. Til slutt fant teamet at volumet av JSON-behandling og spesialisert søk som trengs i PostgreSQL, ville ha vært vanskelig eller rasjonelt å håndheve over en tekstlig type data. Derfor opprettet de en binær representasjon av JSON-datatypen med et komplett utvalg av operatører og metoder. Her kommer JSONB-datatypen. JSONB-datatypen er faktisk et allsidig binært lagringsoppsett med fullstendig prosessering, indeksering og søkefunksjon. Som et resultat forbehandler den JSON-informasjon til et indre oppsett, som bare har en verdi per nøkkel og ignorerer ekstra hvitt mellomrom eller depresjon, eller du kan si innrykk. I denne guiden lærer du hvordan du kan samhandle med JSONB-dataskjemaet i PostgreSQL, samt noen praktiske operatører og metoder for å håndtere JSONB-data.
Datatypen du sannsynligvis trenger og velger å bruke er JSONB, ikke JSON tidlig versjon, som bare brukes for bakoverkompatibilitet. Så åpne PostgreSQL-kommandoskallet og oppgi serverens navn, database, port og brukernavn.
Eksempel 01:
Her er en kort illustrasjon av variasjonene mellom de to datatypene. Vi må lage en tabell 'Ny' med en av kolonnene må være 'JSON' datatype som følger:
>> OPPRETT TABELL Ny (ID seriell PRIMÆR NØKKEL, Val JSON);
Sett inn noen verdier i kolonnen 'Val'.
>> INSERT IN New (Val) VALUES ('[1, 2, 3, 4]'), ('[10, 11, 12, 13]'), ('“key”: “value”') ;
Bruk av '@>' operatør
Når vi prøver å se etter oppføringer med et helt tall i kolonnen 'ekstra', får vi alltid en feilmelding som vedlagt nedenfor.
>> VELG * FRA Ny HVOR Val @> '11';
Ja. JSON er bare tekst og er ikke veldig effektiv, og den inneholder ikke operatørkonfigurasjon. La innholdet endres til jsonb.
>> ALTER TABLE Ny ALTER COLUMN Val TYPE JSONB;
Utfør nå den samme spørringen i skallet, og resultatet viser en rad med tallet '11' i matrisen som gitt nedenfor.
>> VELG * FRA Ny HVOR Val @> '11';
Eksempel 02:
La oss lage en tabell 'Bag' som skal brukes i illustrasjonene til vi begynner å snakke om metodene og operatørene som kan brukes for datatypen PostgreSQL JSONB. En av kolonnene, f.eks.g. 'Merke' må være 'JSONB' datatype som følger:
>> CREATE TABLE Bag (ID serial PRIMARY KEY, Brand JSONB NOT NULL);
Vi bruker følgende SQL INSERT-erklæring for å legge til informasjon i PostgreSQL-tabellen 'Bag':
>> INSERT INTO Bag (Brand) VALUES ('"name": "Gucci", "color": ["red", "black"], "price": 10000, "sold": true,]') , ('"name": "Allure", "color": ["red", "Grey"], "price": 85000, "sold": false,]'), ('"name": "Kidza", "color": ["black", "white"], "price": 75000, "sold": true,] ');Du kan se at dataene er lagt til i form av en ordbok, f.eks.g., nøkler og verdier.
Elementene i denne tabellen "Bag" kan sees ved hjelp av en SELECT-setning, som vist nedenfor:
>> VELG * FRA Veske;
Bruk av '->' Operatør
La oss se etter verdiene i kolonnen 'Merke' via nøkkelen 'navn' ved hjelp av '->' operatoren i spørringen vår. Den vil hente alle postene til nøkkelen 'navn' fra kolonnen 'Merke'. Produksjonen vises i den nye kolonnen 'merke'. Den endelige utgangen vises som vedlagt nedenfor. Som du kan se, har vi tre verdier: 'Gucci, Allure, kidza' for nøkkelen 'navn'.
>> VELG merke -> 'navn' SOM merke FRA Bag;
Bruk av '->' operatør ved bruk av WHERE-klausul
La oss hente alle disse radene fra tabellen "Bag" der "Brand" -kolonnen har verdien "true" for nøkkelen "solgt". Spørsmålet for dette valget er som følger:
>> VELG * FRA Bag WHERE Brand -> 'sold' = 'true';Der ser du, søket hentet to rader bare fra tabellen "Bag" fordi den bare har to rader med verdien "true" for nøkkelen "solgt".
PostgreSQL JSONB-funksjoner:
Med JSONB-informasjon ser det ut til å være en rekke innebygde metoder som kan brukes. La oss se på dem en etter en.
JSONB Hver funksjon:
JSONB Hver funksjon tar dataene og konverterer dem til nøkkelverdiparet. Vurder følgende spørsmål om metoden jsonb_each der vi har gitt verdier. JSON-dataene på høyeste nivå utvides til en serie nøkkelverdikombinasjoner i utfallet. Vi har to nøkkelverdipar, som vist nedenfor.
>> VELG jsonb_each ('"name": "Allure", "sold": "true"' :: jsonb);
JSONB Object Keys Funksjon:
Nå vil vi ta en titt på Jsonb_object_keys-funksjonen. Denne funksjonen tar dataene, og i seg selv skiller og identifiserer nøkkelverdiene i den. Prøv SELECT-spørringen nedenfor, der vi har brukt metoden jsonb_object_keys og gitt noen verdier. Denne metoden returnerer bare JSON-dokumentets nøkler for de spesifikke dataene, som vist nedenfor.
>> VELG jsonb_object_keys ('"name": "kidza", "sold": "true"' :: jsonb);
JSONB Extract Path-funksjon:
JSONB Extract Path-funksjonen tar banen for å vise verdien i resultatet. Prøv spørringen nedenfor i kommandoskallet, der vi har gitt 'merke' som stien til JSONB jsonb_extract_path-metoden. Fra utdataene som er presentert i bildet nedenfor, kan du se at 'Gucci' er en returnert verdi til banen 'navn'.
>> VELG jsonb_extract_path ('"name": "Gucci", "sold": true' :: jsonb, 'name');
JSONB Pretty Funksjon:
Hvis du vil vise JSON-filene dine med en lettlest layout, er JSONB Pretty-funksjonen det beste alternativet. Prøv spørringen nedenfor, så får du en enkel utgang.
>> VELG jsonb_pretty ('"name": "Allure", "sold": false' :: jsonb);
Konklusjon:
Når du lagrer JSONB-informasjon i PostgreSQL-databasene, får du best mulig resultat: enkelheten og påliteligheten til en NoSQL-database kombinert med fordelene til en relasjonsdatabase. Ved å bruke mange operatører og metoder demonstrerte vi hvordan du bruker PostgreSQL JSONB. Du kan arbeide med JSONB-data ved å bruke illustrasjonene våre som referanse.