sql >> Database teknologi >  >> RDS >> PostgreSQL

Hvordan forespørger jeg ved hjælp af felter i den nye PostgreSQL JSON-datatype?

Postgres 9.2

Jeg citerer Andrew Dunstan på pgsql-hackerlisten:

På et tidspunkt vil der muligvis være nogle json-behandlingsfunktioner (i modsætning til json-producerende) funktioner, men ikke i 9.2.

Forhindrer ham ikke i at levere et eksempel på implementering i PLV8, der skulle løse dit problem. (Linket er dødt nu, se moderne PLV8 i stedet.)

Postgres 9.3

Tilbyder et arsenal af nye funktioner og operatører for at tilføje "json-processing".

  • Manualen om ny JSON-funktionalitet.
  • Postgres Wiki om nye funktioner på side 9.3.

Svaret på det oprindelige spørgsmål i Postgres 9.3:

SELECT *
FROM   json_array_elements(
  '[{"name": "Toby", "occupation": "Software Engineer"},
    {"name": "Zaphod", "occupation": "Galactic President"} ]'
  ) AS elem
WHERE elem->>'name' = 'Toby';

Avanceret eksempel:

  • Forespørgselskombinationer med indlejret matrix af poster i JSON-datatype

For større tabeller vil du måske tilføje et udtryksindeks for at øge ydeevnen:

  • Indeks til at finde et element i et JSON-array

Postgres 9.4

Tilføjer jsonb (b for "binær", værdier gemmes som native Postgres-typer) og endnu mere funktionalitet for begge typer. Ud over udtryksindekser nævnt ovenfor, jsonb understøtter også GIN, btree og hash-indekser, hvor GIN er den mest potente af disse.

  • Manualen til json og jsonb datatyper og funktioner.
  • Postgres Wiki på JSONB på side 9.4

Manualen går så langt som at foreslå:

Generelt bør de fleste applikationer foretrække at gemme JSON-data somjsonb , medmindre der er ret specialiserede behov, såsom gamle antagelser om bestilling af objektnøgler.

Fed fremhævelse mine.

Ydeevne fordele ved generelle forbedringer af GIN-indekser.

Postgres 9.5

Fuldfør jsonb funktioner og operatører. Tilføj flere funktioner for at manipulere jsonb på plads og til visning.

  • Større gode nyheder i udgivelsesbemærkningerne til Postgres 9.5.


  1. Indsættelse af flere rækker i Oracle

  2. Sådan håndteres BOB-undtagelser

  3. Hent TOP 10 rækker uden at bruge TOP eller LIMIT? – Ugens interviewspørgsmål #247

  4. JSON_OBJECTAGG() – Opret et JSON-objekt fra forespørgselsresultater i MySQL