PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Como faço para consultar usando campos dentro do novo tipo de dados JSON do PostgreSQL?

Postgres 9.2


Cito Andrew Dunstan na lista pgsql-hackers:

Em algum momento, possivelmente haverá algumas funções de processamento de json (em oposição à produção de json), mas não na versão 9.2.

Não o impede de fornecer um exemplo de implementação em PLV8 que deve resolver seu problema. (O link está morto agora, veja o PLV8 moderno.)

Postgres 9.3


Oferece um arsenal de novas funções e operadores para adicionar "processamento de json".
  • O manual sobre a nova funcionalidade JSON.
  • A Wiki do Postgres sobre novos recursos na página 9.3.

A resposta para a pergunta original no Postgres 9.3:
SELECT *
FROM   json_array_elements(
  '[{"name": "Toby", "occupation": "Software Engineer"},
    {"name": "Zaphod", "occupation": "Galactic President"} ]'
  ) AS elem
WHERE elem->>'name' = 'Toby';

Exemplo avançado:
  • Combinações de consulta com matriz aninhada de registros no tipo de dados JSON

Para tabelas maiores, você pode adicionar um índice de expressão para aumentar o desempenho:
  • Índice para encontrar um elemento em uma matriz JSON

Postgres 9.4


Adiciona jsonb (b para "binário", os valores são armazenados como tipos nativos do Postgres) e ainda mais funcionalidades para ambos tipos. Além dos índices de expressão mencionados acima, jsonb também suporta índices GIN, btree e hash, sendo GIN o mais potente deles.
  • O manual sobre json e jsonb tipos de dados e funções.
  • A Wiki do Postgres sobre JSONB na página 9.4

O manual chega a sugerir:

Em geral, a maioria dos aplicativos deve preferir armazenar dados JSON comojsonb , a menos que haja necessidades bastante especializadas, como suposições legadas sobre a ordenação de chaves de objeto.

Minha ênfase em negrito.

O desempenho se beneficia de melhorias gerais nos índices GIN.

Postgres 9.5


Complete jsonb funções e operadores. Adicione mais funções para manipular jsonb no lugar e para exibição.
  • Grandes boas notícias nas notas de lançamento do Postgres 9.5.