O PostgreSQL 9.2 introduziu o json
tipo de campo. Por que e quando devo usá-lo? Que vantagens tem sobre um campo de texto?
Achei que havia novas opções de consulta disponíveis, mas não vi nenhuma. Estou esquecendo de algo?
O PostgreSQL 9.2 introduziu o json
tipo de campo. Por que e quando devo usá-lo? Que vantagens tem sobre um campo de texto?
Achei que havia novas opções de consulta disponíveis, mas não vi nenhuma. Estou esquecendo de algo?
Postgre 9.2
O benefício do novo recurso é duplo. Colunas do tipo
json
verificam a validade de seu conteúdo para que o que está na coluna seja JSON automaticamente válido e você receba um erro se tentar escrever qualquer outra coisa nela.E você tem funções básicas para criar JSON válido em tempo real a partir de linhas ou matrizes - o que é um caso de uso muito comum.
Cito Andrew Dunstan na lista de hackers pgsql :
Eu usei essa citação antes nesta questão relacionada no SO .
Postgre 9.3
.. finalmente traz uma série de funções e operadores. Confira a página de manual para funções JSON .
Resposta relacionada no SO:
json
campo.@Will postou uma postagem no blog. Veja o comentário abaixo.
Postgre 9.4
Certifique-se de verificar o novo
jsonb
tipo com uma série de novas funcionalidades.Acima de tudo, o armazenamento binário decomposto permite um armazenamento menor em disco e um operador de igualdade para
jsonb
(diferente dejson
), o que possibilita várias operações adicionais (comoDISTINCT
ou umUNIQUE
índice).Ainda mais funções foram adicionadas para ambos
json
ejsonb
.json_to_record()
,json_to_recordset()
etc. Mais nas notas de lançamento.Resumindo, o tipo de dados JSON (e a extensão HSTORE mais antiga e o tipo de dados também) permite que você use o PostgreSQL como um armazenamento de dados "sem esquema" (ou combine dados relacionais e não relacionais "sem esquema"), em vez de ter que recorrer a algumas das outras opções NoSQL (como MongoDB). Você ainda ganha algumas coisas que não pode fazer com o MongoDB, como indexação filtrada, indexação de expressão, etc. A única desvantagem é que o PostgreSQL não suporta fragmentação pronta para uso como o MongoDB faz... realmente questionam a frequência com que a fragmentação é realmente necessária. Com um banco de dados PostgreSQL 9.3 bem configurado, recursos de sistema operacional suficientes e alguns índices de expressão filtrados razoavelmente bem pensados, você deve ser capaz de obter facilmente recuperações de linha sem esquema na faixa de 0,25 milissegundos.
HTH, Dave Sisk
Basicamente, vejo três casos de uso aqui:
A primeira pode ser feita diretamente do PostgreSQL sem a necessidade de addons. Você deve ser capaz de fazer algo como:
Isso pode ser usado para criar matrizes aninhadas etc. em sua saída e evitar muitos problemas de análise confusos no lado do aplicativo.
a segunda é passar dados complexos para o banco de dados para processamento. Atualmente não há funções internas para facilitar isso, mas com addons como pl/v8js, você pode programar seu banco de dados em Javascript e usar json como formato de troca. Isso pode permitir a criação de interfaces mais ricas dentro do seu banco de dados. Observe que, como você pode indexar saídas de função, pode usá-lo para criar índices de aspectos de JSON a serem armazenados em seu banco de dados.
A terceira é uma área que planejamos usar no LedgerSMB. A ideia é permitir que os integradores de sistemas armazenem informações muito simples junto com as contas dos clientes. Isso poderia então ser empacotado em um campo JSON que seria armazenado. Isso não poderia ser consultado diretamente pelos aplicativos principais, mas se as pessoas quisessem adicionar isso usando pl/v8js, isso poderia ser feito para empresas individuais usando o software.