Postgres 9.2
Jag citerar Andrew Dunstan på pgsql-hackarlistan:
I något skede kommer det möjligen att finnas vissa json-bearbetande (i motsats till json-producerande) funktioner, men inte i 9.2.
Hindrar inte honom från att tillhandahålla ett exempel på implementering i PLV8 som borde lösa ditt problem. (Länken är död nu, se modern PLV8 istället.)
Postgres 9.3
Erbjuder en arsenal av nya funktioner och operatörer för att lägga till "json-processing".
- Handboken om nya JSON-funktioner.
- Postgres Wiki om nya funktioner på sidan 9.3.
Svaret på den ursprungliga frågan 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';
Avancerat exempel:
- Frågekombinationer med kapslad array av poster i JSON-datatypen
För större tabeller kanske du vill lägga till ett uttrycksindex för att öka prestandan:
- Index för att hitta ett element i en JSON-array
Postgres 9.4
Lägger till jsonb
(b för "binär", värden lagras som infödda Postgres-typer) och ännu mer funktionalitet för båda typer. Förutom uttrycksindex som nämns ovan, jsonb
stöder även GIN-, btree- och hashindex, GIN är den mest potenta av dessa.
- Handboken om
json
ochjsonb
datatyper och funktioner. - Postgres Wiki på JSONB på sidan 9.4
Manualen går så långt att den föreslår:
Generellt sett bör de flesta applikationer föredra att lagra JSON-data som
jsonb
, såvida det inte finns ganska specialiserade behov, såsom äldre antaganden om beställning av objektnycklar.
Djärv betoning min.
Prestanda gynnas av allmänna förbättringar av GIN-index.
Postgres 9.5
Fyll i jsonb
funktioner och operatörer. Lägg till fler funktioner för att manipulera jsonb
på plats och för visning.
- Stora goda nyheter i versionskommentarerna för Postgres 9.5.