Pular para o conteúdo principal

Questão de Banco de Dados — PostgreSQL — FCC 2025

Banco de DadosPostgreSQL
Código
fc150355
Banca
FCC
Órgão
MPE PI
Ano
2025
Cargo
Ana Min ( )
No PostgreSQL 14, o recurso multirange foi introduzido para aprimorar o trabalho com intervalos de dados, como datas ou números. Esse tipo
  1. Arestringe consultas a intervalos contendo tipos numéricos, excluindo suporte para datas ou outros tipos personalizados como strings e objetos.
  2. Brequer a criação de índices GIN para funcionar, permitindo consultas complexas sobre múltiplos intervalos, mas incom- patíveis com indices B-tree.
  3. Crepresenta uma lista ordenada de intervalos não sobrepostos, permitindo consultas complexas sobre múltiplos intervalos.
  4. Dsubstitui o tipo jsonb para armazenar intervalos como objetos JSON, com suporte a valores subscritos e arrays contendo dados heterogêneos.
  5. Ehabilita a agregação automática de intervalos em uma única linha, reduzindo o número de linhas retornadas em consultas sem necessidade de funções específicas.
Revelar gabarito e comentário

GabaritoC — representa uma lista ordenada de intervalos não sobrepostos, permitindo consultas complexas sobre múltiplos intervalos.

Comentário gerado por IA. É um apoio ao estudo, ancorado em fontes, mas pode conter imprecisões — confira sempre na fonte oficial (lei, súmula, edital e gabarito da banca). Encontrou um erro? Use “Reportar”.

Multirange no PostgreSQL 14

Gabarito: letra C. O tipo multirange no PostgreSQL 14 representa uma lista ordenada de intervalos não sobrepostos, permitindo consultas complexas sobre múltiplos intervalos — exatamente o que a alternativa C afirma. Esse recurso foi introduzido para aprimorar o trabalho com intervalos de dados, como datas ou números, e é uma extensão natural do tipo range já existente.

O PostgreSQL é um sistema gerenciador de banco de dados objeto-relacional (ORDBMS) com ênfase em extensibilidade. Entre suas características, destacam-se consultas complexas, chaves estrangeiras, integridade transacional, controle de concorrência multiversão e suporte ao modelo híbrido objeto-relacional. Os tipos range foram introduzidos no PostgreSQL 9.2 e permitem representar um intervalo contínuo de valores, como [1, 10), [2023-01-01, 2023-12-31), etc. O multirange, por sua vez, é uma coleção ordenada de um ou mais intervalos não sobrepostos do mesmo tipo base. Por exemplo, um multirange de datas pode representar {[2023-01-01, 2023-03-31), [2023-07-01, 2023-09-30)} — dois períodos distintos agrupados em um único valor.

A principal motivação para o multirange é permitir operações mais eficientes sobre múltiplos intervalos. Antes do PostgreSQL 14, para representar vários intervalos, era necessário usar uma tabela separada ou um array de ranges, o que complicava consultas e operações como união, interseção e diferença. Com o multirange, essas operações podem ser realizadas diretamente sobre o tipo, simplificando a lógica e melhorando o desempenho. Por exemplo, para verificar se uma data está contida em qualquer um dos intervalos de um multirange, basta usar o operador @> (contém) diretamente.

Na prática, o multirange funciona como um tipo de dado nativo, com suporte a operadores específicos como && (sobreposição), @> (contém), <@ (contido em), -|- (adjacente), entre outros. Ele também pode ser indexado com índices GiST e SP-GiST, que são otimizados para consultas espaciais e de intervalo. No entanto, o multirange não requer a criação de índices para funcionar — ele pode ser usado sem índices, embora a indexação melhore o desempenho de consultas em grandes volumes de dados.

A distinção importante aqui é entre range e multirange: enquanto o range representa um único intervalo contínuo, o multirange representa uma coleção de intervalos não sobrepostos. Essa diferença é crucial para entender as alternativas. Além disso, o multirange não está relacionado a tipos NoSQL, JSON ou agregação automática — ele é um tipo de dado relacional puro, integrado ao modelo relacional do PostgreSQL.

A pegadinha que a banca explora nesta questão é a confusão entre multirange e outros conceitos de banco de dados, como JSONB, índices e agregação. O candidato que não conhece o multirange pode ser induzido a escolher uma alternativa que fala de JSON ou de agregação automática, mas a definição correta é a da alternativa C. Guarde a fronteira entre range (um intervalo) e multirange (vários intervalos não sobrepostos): é exatamente nela que as alternativas se dividem.

Alternativa

Afirmação sobre multirange

Veredito

A

Restringe a tipos numéricos, excluindo datas e personalizados

❌ Incorreta

B

Requer índices GIN e é incompatível com B-tree

❌ Incorreta

C

Lista ordenada de intervalos não sobrepostos, permitindo consultas complexas

✅ Correta

D

Substitui jsonb para armazenar intervalos como JSON

❌ Incorreta

E

Habilita agregação automática sem funções específicas

❌ Incorreta

Alternativa A — ❌ Incorreta

Esta alternativa afirma que o multirange restringe consultas a intervalos contendo tipos numéricos, excluindo suporte para datas ou outros tipos personalizados. Isso é falso: o multirange suporta qualquer tipo base que tenha um tipo range correspondente, incluindo datas (daterange, tsrange, tstzrange), números (int4range, int8range, numrange) e até tipos personalizados, desde que sejam definidos operadores de comparação e de intervalo. O PostgreSQL é extensível por natureza, permitindo a criação de tipos range e multirange para tipos definidos pelo usuário. Portanto, a restrição a tipos numéricos não existe.

Alternativa B — ❌ Incorreta

Esta alternativa afirma que o multirange requer a criação de índices GIN para funcionar. Isso é incorreto: o multirange pode ser usado sem nenhum índice, como qualquer outro tipo de dado. Os índices GiST e SP-GiST são recomendados para melhorar o desempenho de consultas sobre multirange, mas não são obrigatórios. Além disso, a alternativa menciona incompatibilidade com índices B-tree, o que é irrelevante: índices B-tree não são adequados para consultas de intervalo, mas isso não significa que o multirange seja incompatível com eles — apenas que não são a escolha ideal. A exigência de índices GIN é uma invenção da alternativa.

Alternativa C — ✅ Correta ⟵ GABARITO

Esta alternativa descreve corretamente o multirange: uma lista ordenada de intervalos não sobrepostos, permitindo consultas complexas sobre múltiplos intervalos. Essa é a definição exata do tipo multirange no PostgreSQL 14. A ordenação é garantida pela implementação, e a não sobreposição é uma propriedade intrínseca do tipo — ao criar um multirange, os intervalos são automaticamente normalizados para não se sobreporem. Isso permite operações eficientes de união, interseção e diferença, além de consultas como "encontrar todos os registros que se sobrepõem a qualquer intervalo do multirange".

Alternativa D — ❌ Incorreta

Esta alternativa afirma que o multirange substitui o tipo jsonb para armazenar intervalos como objetos JSON. Isso é completamente falso: o multirange é um tipo de dado relacional para intervalos, enquanto o jsonb é um tipo para armazenar dados JSON em formato binário decomposto. O jsonb suporta indexação e é otimizado para processamento de documentos JSON, mas não tem relação com intervalos. O multirange não armazena dados como JSON, nem suporta valores subscritos ou arrays heterogêneos — essas são características do jsonb, não do multirange. A alternativa confunde dois tipos de dados completamente diferentes.

Alternativa E — ❌ Incorreta

Esta alternativa afirma que o multirange habilita a agregação automática de intervalos em uma única linha, reduzindo o número de linhas retornadas sem necessidade de funções específicas. Isso é incorreto: o multirange é um tipo de dado que representa múltiplos intervalos em um único valor, mas não realiza agregação automática. Para agregar intervalos de várias linhas em um único multirange, é necessário usar funções específicas, como range_agg() (introduzida no PostgreSQL 14) ou multirange() construtor. O multirange não reduz automaticamente o número de linhas em consultas — ele apenas permite armazenar e manipular múltiplos intervalos em um único campo. A agregação é uma operação separada que requer funções explícitas.

Gabarito: letra C — o multirange é uma lista ordenada de intervalos não sobrepostos, permitindo consultas complexas sobre múltiplos intervalos.

Link permanente: /questoes/fc150355