Postgres 9.2
Cito Andrew Dunstan nell'elenco degli hacker di pgsql:
Ad un certo punto potrebbero esserci alcune funzioni di elaborazione json (in opposizione alla produzione di json), ma non in 9.2.
Non gli impedisce di fornire un'implementazione di esempio in PLV8 che dovrebbe risolvere il tuo problema. (Link è morto ora, guarda invece il moderno PLV8.)
Postgres 9.3
Offre un arsenale di nuove funzioni e operatori per aggiungere "elaborazione json".
- Il manuale sulla nuova funzionalità JSON.
- Il Wiki di Postgres sulle nuove funzionalità a pagina 9.3.
La risposta alla domanda originale in Postgres 9.3:
SELECT *
FROM json_array_elements(
'[{"name": "Toby", "occupation": "Software Engineer"},
{"name": "Zaphod", "occupation": "Galactic President"} ]'
) AS elem
WHERE elem->>'name' = 'Toby';
Esempio avanzato:
- Combinazioni di query con array di record nidificati nel tipo di dati JSON
Per le tabelle più grandi potresti voler aggiungere un indice di espressione per aumentare le prestazioni:
- Indice per trovare un elemento in un array JSON
Postgres 9.4
Aggiunge jsonb
(b per "binario", i valori sono memorizzati come tipi Postgres nativi) e ancora più funzionalità per entrambi tipi. Oltre agli indici delle espressioni sopra menzionati, jsonb
supporta anche gli indici GIN, btree e hash, GIN è il più potente di questi.
- Il manuale su
json
ejsonb
tipi di dati e funzioni. - Il Wiki di Postgres su JSONB a pagina 9.4
Il manuale si spinge fino a suggerire:
In generale, la maggior parte delle applicazioni preferisce archiviare i dati JSON come jsonb
, a meno che non vi siano esigenze piuttosto specifiche, come presupposti legacy sull'ordinamento delle chiavi degli oggetti.
Enfasi in grassetto la mia.
Le prestazioni traggono vantaggio dai miglioramenti generali degli indici GIN.
Postgres 9.5
Completa jsonb
funzioni e operatori. Aggiungi più funzioni per manipolare jsonb
in posizione e per la visualizzazione.
- Grandi buone notizie nelle note di rilascio di Postgres 9.5.