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
ejsonb
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.