devterview_$ iniciar simulação

`jsonb` no PostgreSQL: quando usar e como indexar

MédioPlenoTipos e índices

Pergunta

Quando faz sentido guardar dados em uma coluna `jsonb` no Postgres em vez de colunas normais, e como indexar consultas nela?

Resposta esperada

`jsonb` é bom pra dados semiestruturados e variáveis por linha — payload de webhook, atributos de produto que diferem por categoria, snapshot de configuração, metadados que evoluem. Vantagem sobre `json` (texto): é binário, permite operadores (`->`, `->>`, `@>`, `?`) e índices. Ruim quando os campos são estáveis e você faz JOIN/agregação/constraint sobre eles — aí colunas normais com tipos e índices B-tree são melhores (e o banco garante a forma). Indexação: índice GIN pra consultas de contenção/existência (com o operador `@>` passando um objeto, ou o operador `?` testando uma chave); ou índice B-tree numa EXPRESSÃO pra um campo específico muito consultado (um índice sobre `dados->>'email'`). Antipadrão: usar `jsonb` pra tudo e virar um banco 'schemaless' dentro do relacional, perdendo o que ele tem de melhor.

Por que perguntam isso

Pergunta pleno/sênior de Postgres. Sinal de domínio: GIN vs B-tree expressão, e o antipadrão 'schemaless dentro do relacional'.

#jsonb#gin#indices
publicidade

Relacionadas