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

Come posso eseguire query utilizzando i campi all'interno del nuovo tipo di dati JSON di PostgreSQL?

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 e jsonb 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.