Nederlands
  • postgresql
  • jsonb
  • json
  • database

PostgreSQL JSONB-type beheersen in één artikel

Leer hoe je PostgreSQL's JSONB-type kunt gebruiken om JSON-gegevens efficiënt op te slaan, op te vragen en te manipuleren.

Yijun
Yijun
Developer

In moderne applicatieontwikkeling wordt het afhandelen en opslaan van ongestructureerde gegevens steeds gebruikelijker. PostgreSQL's JSONB-type biedt een krachtig hulpmiddel voor ontwikkelaars om JSON-gegevens efficiënt op te slaan en op te vragen. In dit artikel zullen we ingaan op het concept en gebruik van het JSONB-type en de krachtige functies aantonen door middel van specifieke codevoorbeelden.

Wat is JSONB?

JSONB is een PostgreSQL-datatype dat JSON-gegevens opslaat in een binair formaat. In tegenstelling tot het reguliere JSON-type is JSONB efficiënter in het uitvoeren van queries en manipulaties. Het ondersteunt een rijke set van operatoren en functies die het omgaan met JSON-gegevens vereenvoudigen. Daarnaast ondersteunt JSONB meerdere indextypen, waaronder B-tree, Hash, GIN en GiST-indexen, wat de query-prestaties verder verbetert.

JSONB-type maken

Een tabel maken met JSONB-type

Laten we eerst een tabel maken met een JSONB-kolom. Stel dat we een products-tabel hebben om productinformatie op te slaan, waarbij de productdetails worden opgeslagen met behulp van het JSONB-type.

JSONB-gegevens invoegen

We kunnen JSON-gegevens invoegen in een JSONB-veld met behulp van een eenvoudige INSERT-instructie.

JSONB-gegevens opvragen

Waarden extraheren uit JSONB-velden

We kunnen de ->>-operator gebruiken om tekstwaarden uit een JSONB-veld te extraheren. Het volgende voorbeeld toont hoe merkgegevens van een product kunnen worden geëxtraheerd.

Geneste waarden extraheren met JSONB

We kunnen een combinatie van -> en ->>-operatoren gebruiken om waarden te extraheren die genest zijn binnen een JSON-structuur. Het volgende voorbeeld toont hoe CPU-gegevens van een product kunnen worden geëxtraheerd.

Waarden extraheren met JSONB-paden

Met de #>>-operator kunnen we waarden uit specifieke paden binnen de JSON-gegevens extraheren. Het volgende voorbeeld toont hoe opslaginformatie kan worden geëxtraheerd.

De @>-operator gebruiken voor bevattingenquery's

De @>-operator controleert of een JSONB-object een ander JSONB-object bevat. Het volgende voorbeeld toont hoe producten van een specifiek merk kunnen worden opgevraagd.

JSONB-gegevens wijzigen

JSONB-gegevens bijwerken

We kunnen de functie jsonb_set gebruiken om JSONB-gegevens bij te werken. Deze functie werkt de waarde bij op een gespecificeerd pad. Het volgende voorbeeld toont hoe opslaginformatie van een product kan worden bijgewerkt.

Velden op het hoogste niveau verwijderen in JSONB-gegevens

We kunnen de --operator gebruiken om velden op het hoogste niveau uit JSONB-gegevens te verwijderen. Deze operator verwijdert de gespecificeerde sleutel uit een JSONB-object. Het volgende voorbeeld toont hoe een veld op het hoogste niveau uit productdetails kan worden verwijderd.

Geneste velden verwijderen in JSONB-gegevens

We kunnen de #--operator gebruiken om specifieke paden-elementen uit JSONB-gegevens te verwijderen. Deze operator verwijdert de sleutel op het gespecificeerde pad. Het volgende voorbeeld toont hoe CPU-informatie uit productspecificaties kan worden verwijderd.

Geavanceerde JSONB-query's

JSONB-arrays gebruiken

JSONB-gegevens kunnen arrays bevatten, en we kunnen array-gerelateerde operatoren gebruiken om met deze gegevens om te gaan. Het volgende voorbeeld toont hoe producten met meerdere tags kunnen worden opgeslagen en opgevraagd.

In het bovenstaande voorbeeld kun je ook de ?-operator gebruiken om te controleren of een JSONB-array een specifiek element bevat:

JSONB-gegevens samenvoegen

We kunnen de ||-operator gebruiken om twee JSONB-objecten samen te voegen. Deze operator combineert twee JSONB-objecten tot één. Het volgende voorbeeld toont hoe nieuwe specificaties in bestaande productdetails kunnen worden samengevoegd.

JSONB-gegevens aggregeren

We kunnen aggregatiefuncties gebruiken om JSONB-gegevens te verwerken, zoals het tellen van het aantal producten per merk.

JSONB-indexering en prestatieoptimalisatie

Om query-prestaties met JSONB-gegevens te verbeteren, kunnen we indexen maken op specifieke sleutels binnen het JSONB-veld. Het kiezen van het juiste type index is cruciaal voor verschillende querybehoeften.

  • GIN-index: Geschikt voor complexe queries met multigewaardeerde gegevens, arrays en full-text zoekopdrachten.
  • B-tree-index: Geschikt voor eenvoudige key-value paarquery's, range-query's en sorteeroperaties.

Het correct selecteren en maken van indexen kan de prestaties van JSONB-gegevensqueries aanzienlijk verbeteren.

GIN-index maken

GIN-indexen zijn ideaal om queries te versnellen die multigewaardeerde gegevens en arrays bevatten. Bijvoorbeeld, we kunnen een GIN-index maken voor de tags-array zoals eerder vermeld om queries op array-elementen te versnellen.

B-tree-index maken

Voor eenvoudige key-value paarquery's kan een B-tree-index ook de prestaties aanzienlijk verbeteren. B-tree-indexen zijn geschikt voor range-query's en sorteeroperaties. Het volgende voorbeeld toont hoe een B-tree-index voor de model-sleutel kan worden gemaakt in de details

veld.

Conclusie

PostgreSQL's JSONB-type biedt een krachtige en flexibele oplossing voor het omgaan met JSON-gegevens. Met de introductie en voorbeelden in dit artikel, zou je nu een uitgebreide kennis moeten hebben van hoe je het JSONB-type kunt gebruiken. Door deze technieken te beheersen, kun je ongestructureerde gegevens efficiënt verwerken en opvragen, waardoor de prestaties en flexibiliteit van je applicaties worden verbeterd.