Questão de Banco de Dados — SGBD - Sistema de Gerenciamento de Banco de Dados — FGV 2024
Banco de Dados›SGBD - Sistema de Gerenciamento de Banco de Dados
Código
fg086316
Banca
FGV
Órgão
INPE
Ano
2024
Nível
Superior
Cargo
Tecnologista Pleno I - Especificação, Projeto e Arquitetura de Sistemas de Software para o Processamento e Distribuição de Imagens de Sensoriamento Remoto
Considere a seguinte estrutura de dados criada em SGBD PostgreSQL com extensão espacial PostGIS:Foi elaborado o seguinte código para ser executado na estrutura definida.De acordo com o código supracitado, o atributo time_gap é do tipo
Ainteger.
Binterval.
Ctimestamp.
Dreal.
Etime.
Revelar gabarito e comentário▾
GabaritoB — interval.
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”.
PostgreSQL e PostGIS: tipos de dados temporais
Gabarito: letra B. O atributo time_gap é do tipo interval porque o código utiliza a função ST_Time (ou operação equivalente) que retorna a diferença entre dois timestamps, e essa diferença é representada no PostgreSQL pelo tipo interval — que armazena durações de tempo. As demais alternativas (integer, timestamp, real, time) não representam corretamente uma duração entre dois instantes.
O PostgreSQL possui uma família de tipos de dados temporais que costuma gerar confusão em provas: timestamp (armazena um instante específico, com data e hora), time (armazena apenas a hora do dia), date (apenas a data) e interval (armazena uma duração, ou seja, a diferença entre dois instantes). A pegadinha clássica da banca é justamente trocar o tipo que representa um instante (timestamp/time) pelo tipo que representa uma duração (interval).
Quando você subtrai dois valores timestamp no PostgreSQL, o resultado é automaticamente do tipo interval. Por exemplo, '2024-01-01 10:00:00'::timestamp - '2024-01-01 09:30:00'::timestamp retorna 00:30:00 como um interval. O mesmo vale para a subtração de dois valores time. Essa é a regra fundamental: a diferença entre dois instantes é sempre uma duração, e no PostgreSQL essa duração é armazenada como interval.
No contexto do PostGIS, a extensão espacial do PostgreSQL, a função ST_Time (ou ST_TimeStamp) é usada para extrair o componente de tempo de uma geometria ou para calcular diferenças temporais. Quando o código calcula a diferença entre dois timestamps (por exemplo, o tempo de chegada e o tempo de partida de um veículo em um waypoint), o resultado é um interval. O atributo time_gap foi criado justamente para armazenar essa diferença, portanto seu tipo é interval.
A distinção crucial que decide esta questão é: instante vs. duração. timestamp e time representam pontos na linha do tempo (instantes), enquanto interval representa um espaço entre dois pontos (duração). A banca explora exatamente essa confusão: o candidato que vê "time" no nome do atributo (time_gap) pode ser levado a escolher time, mas o sufixo "gap" (lacuna, intervalo) já indica que se trata de uma duração. Guarde essa fronteira: sempre que o código calcular uma diferença entre datas/horas, o tipo resultante será interval.
Tipos temporais no PostgreSQL
1Instante (ponto na linha do tempo)
timestamp (data + hora)
time (hora do dia)
date (apenas data)
2Duração (espaço entre dois pontos)
interval
Resultado da subtração de dois instantes
3Regra fundamental
Subtração de timestamps → interval
Subtração de times → interval
LEVEL · soulevel.com.br
Alternativa A — ❌ Incorreta
integer armazena números inteiros. A diferença entre dois timestamps não é um número inteiro, mas uma duração com componentes de dias, horas, minutos e segundos. Embora seja possível converter um interval em um número (por exemplo, extraindo o total de segundos), o tipo nativo do resultado da subtração é interval, não integer.
Alternativa B — ✅ Correta ⟵ GABARITO
O tipo interval é exatamente o que representa uma duração de tempo no PostgreSQL. A subtração entre dois valores timestamp (ou time) retorna um interval, e é isso que o atributo time_gap armazena — a diferença temporal entre dois eventos. O nome do atributo reforça: "gap" significa lacuna, intervalo, ou seja, uma duração.
Alternativa C — ❌ Incorreta
timestamp armazena um instante específico (data e hora). O atributo time_gap não armazena um instante, mas a diferença entre dois instantes. Se o código calcula time_gap como a subtração entre dois timestamps, o resultado é um interval, não um novo timestamp.
Alternativa D — ❌ Incorreta
real é um tipo de ponto flutuante para números com casas decimais. Não é adequado para armazenar durações de tempo, que possuem componentes de dias, horas, minutos e segundos. O PostgreSQL possui o tipo interval especificamente para essa finalidade.
Alternativa E — ❌ Incorreta
time armazena apenas a hora do dia (sem data), representando um instante dentro de um dia. O atributo time_gap representa uma duração, não um instante. A confusão entre time (instante) e interval (duração) é a armadilha central desta questão — o nome do atributo contém "time", mas o tipo correto é interval.
NÃO CAIA NESSA!
A banca explora a confusão entre time e interval. O nome do atributo (time_gap) contém a palavra "time", induzindo o candidato a escolher a alternativa E. Mas "gap" significa lacuna/intervalo — ou seja, uma duração. A regra é: subtração de dois instantes = interval. Sempre que o código calcular uma diferença entre datas ou horas, o tipo resultante será interval, nunca time ou timestamp.
PEGA ESSA DICA!
Para fixar, lembre-se da tríade temporal do PostgreSQL: timestamp = instante (data + hora), time = hora do dia, interval = duração. Na prova, ao ver uma operação de subtração entre dois valores temporais, marque interval sem hesitar. Se a alternativa trouxer timestamp ou time como resultado de uma subtração, está errada.