AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / dba / Perguntas / 25101
Accepted
Jonathan Egerton
Jonathan Egerton
Asked: 2012-09-29 05:51:24 +0800 CST2012-09-29 05:51:24 +0800 CST 2012-09-29 05:51:24 +0800 CST

O que posso fazer com o novo campo json?

  • 772

O PostgreSQL 9.2 introduziu o jsontipo 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?

postgresql postgresql-9.2
  • 3 3 respostas
  • 6262 Views

3 respostas

  • Voted
  1. Best Answer
    Erwin Brandstetter
    2012-09-29T06:20:24+08:002012-09-29T06:20:24+08:00

    Postgre 9.2

    O benefício do novo recurso é duplo. Colunas do tipojson 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 :

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

    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:

    • Como consultar um elemento específico do jsoncampo.
    • Como suportar isso com um index.

    @Will postou uma postagem no blog. Veja o comentário abaixo.

    Postgre 9.4

    Certifique-se de verificar o novo jsonbtipo 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 de json), o que possibilita várias operações adicionais (como DISTINCTou um UNIQUEíndice).

    Ainda mais funções foram adicionadas para ambos jsone jsonb. json_to_record(), json_to_recordset()etc. Mais nas notas de lançamento.

    • 7
  2. Dave Sisk
    2013-10-22T15:58:10+08:002013-10-22T15:58:10+08:00

    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

    • 2
  3. Chris Travers
    2012-10-02T20:52:18+08:002012-10-02T20:52:18+08:00

    Basicamente, vejo três casos de uso aqui:

    1. passar resultados complexos facilmente de volta para o aplicativo
    2. passar dados complexos para o banco de dados do aplicativo e
    3. Armazene dados relativamente livres para processamento posterior.

    A primeira pode ser feita diretamente do PostgreSQL sem a necessidade de addons. Você deve ser capaz de fazer algo como:

    SELECT row_to_json(mt.id, mt.testval, array_agg(mt2))
      FROM my_table mt
      JOIN my_table2 mt2 ON mt.id = mt2.mt_id
     WHERE mt.id = 123;
    

    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.

    • 1

relate perguntas

  • Posso ativar o PITR depois que o banco de dados foi usado

  • Práticas recomendadas para executar a replicação atrasada do deslocamento de tempo

  • Os procedimentos armazenados impedem a injeção de SQL?

  • Sequências Biológicas do UniProt no PostgreSQL

  • Qual é a diferença entre a replicação do PostgreSQL 9.0 e o Slony-I?

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Como ver a lista de bancos de dados no Oracle?

    • 8 respostas
  • Marko Smith

    Quão grande deve ser o mysql innodb_buffer_pool_size?

    • 4 respostas
  • Marko Smith

    Listar todas as colunas de uma tabela especificada

    • 5 respostas
  • Marko Smith

    restaurar a tabela do arquivo .frm e .ibd?

    • 10 respostas
  • Marko Smith

    Como usar o sqlplus para se conectar a um banco de dados Oracle localizado em outro host sem modificar meu próprio tnsnames.ora

    • 4 respostas
  • Marko Smith

    Como você mysqldump tabela (s) específica (s)?

    • 4 respostas
  • Marko Smith

    Como selecionar a primeira linha de cada grupo?

    • 6 respostas
  • Marko Smith

    Listar os privilégios do banco de dados usando o psql

    • 10 respostas
  • Marko Smith

    Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Como faço para listar todos os bancos de dados e tabelas usando o psql?

    • 7 respostas
  • Martin Hope
    Mike Walsh Por que o log de transações continua crescendo ou fica sem espaço? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland Listar todas as colunas de uma tabela especificada 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney O MySQL pode realizar consultas razoavelmente em bilhões de linhas? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx Como posso monitorar o andamento de uma importação de um arquivo .sql grande? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison Como você mysqldump tabela (s) específica (s)? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    pedrosanta Listar os privilégios do banco de dados usando o psql 2011-08-04 11:01:21 +0800 CST
  • Martin Hope
    Jonas Como posso cronometrar consultas SQL usando psql? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas Como faço para listar todos os bancos de dados e tabelas usando o psql? 2011-02-18 00:45:49 +0800 CST
  • Martin Hope
    bernd_k Quando devo usar uma restrição exclusiva em vez de um índice exclusivo? 2011-01-05 02:32:27 +0800 CST

Hot tag

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve