Pular para o conteúdo principal

Questão de Banco de Dados — PostgreSQL — CESPE / CEBRASPE 2025

Banco de DadosPostgreSQL
Código
ce417311
Banca
CESPE / CEBRASPE
Órgão
STM
Ano
2025
Cargo
AJ ( )
A respeito de Flyway, PostgreSQL e H2 Database, julgue o próximo item.   Considere que os comandos a seguir tenham sido executados no PostgreSQL 14.18.   CREATE TABLE IF NOT EXISTS public.servidor (idServidor INT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY, nome VARCHAR(30)); CREATE TABLE IF NOT EXISTS public.magistrado (idServidor INT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY, matricula int) INHERITS (public.servidor); INSERT INTO public.servidor (nome) VALUES ('Pedro'), ('João'); INSERT INTO public.magistrado (nome) VALUES ('Maria'); SELECT * FROM public.servidor; Nesse caso, o comando SELECT * FROM public.servidor; apresentará, ao ser executado, o resultado a seguir. idServidor | nome -----------+-------          1 | Pedro          2 | João          3 | Maria -----------+-------
  1. CCerto
  2. EErrado
Revelar gabarito e comentário

GabaritoE — Errado

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”.

Herança de tabelas no PostgreSQL: o SELECT na tabela pai inclui as filhas

Gabarito: Errado. O comando SELECT * FROM public.servidor; não retornará apenas as linhas de servidor — ele retornará também as linhas das tabelas que herdam de servidor, incluindo a linha inserida em magistrado. Portanto, o resultado apresentado no enunciado está incorreto, pois a linha 3 | Maria não apareceria no resultado do SELECT na tabela pai, a menos que se use ONLY.

O PostgreSQL implementa herança de tabelas, um recurso que permite que uma tabela filha herde as colunas da tabela pai. Quando você executa um SELECT em uma tabela pai, por padrão, o PostgreSQL inclui as linhas de todas as tabelas que herdam dela. Para consultar apenas a tabela pai, é necessário usar a cláusula ONLY antes do nome da tabela: SELECT * FROM ONLY public.servidor;.

No exemplo dado, a tabela magistrado herda de servidor (INHERITS (public.servidor)). O INSERT INTO public.magistrado (nome) VALUES ('Maria'); insere uma linha na tabela magistrado, que também é uma linha da tabela servidor (por herança). Assim, o SELECT * FROM public.servidor; retornará três linhas: 1 | Pedro, 2 | João e 3 | Maria. O resultado mostrado no enunciado, que apresenta apenas as duas primeiras linhas, está errado.

A pegadinha aqui é que muitos candidatos conhecem a herança de tabelas, mas esquecem que o SELECT na tabela pai inclui as filhas por padrão. A banca explora exatamente essa confusão: o candidato pode pensar que o SELECT retorna apenas as linhas da tabela servidor, ignorando a herança.

NÃO CAIA NESSA!

A banca explora a herança de tabelas do PostgreSQL. O candidato pode pensar que o SELECT * FROM public.servidor; retorna apenas as linhas da tabela servidor, mas o PostgreSQL inclui as linhas das tabelas filhas por padrão. Para consultar apenas a tabela pai, é necessário usar ONLY.

1SELECT na tabela pai
Inclui linhas das filhas (padrão)
Exclui filhas com ONLY
2Tabela filha (INHERITS)
Herda colunas da pai
Linha inserida na filha também é da pai
3Resultado do exemplo
servidor: Pedro, João
magistrado: Maria
SELECT * FROM servidor → 3 linhas
Herança de tabelas (PostgreSQL)
LEVELsoulevel.com.br
Herança de tabelas (PostgreSQL): SELECT na tabela pai (Inclui linhas das filhas (padrão), Exclui filhas com ONLY); Tabela filha (INHERITS) (Herda colunas da pai, Linha inserida na filha também é da pai); Resultado do exemplo (servidor: Pedro, João, magistrado: Maria, SELECT * FROM servidor → 3 linhas)

Item — ❌ Errado

O comando SELECT * FROM public.servidor; retornará três linhas, não duas. A linha 3 | Maria aparecerá no resultado, pois a tabela magistrado herda de servidor e o SELECT na tabela pai inclui as linhas das tabelas filhas. O resultado apresentado no enunciado está incorreto.

Gabarito: Errado.

Link permanente: /questoes/ce417311