Pular para o conteúdo principal

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

Banco de DadosPostgreSQL
Código
ce417316
Banca
CESPE / CEBRASPE
Órgão
STM
Ano
2025
Cargo
AJ ( )
Julgue o item seguinte, relativos a RabbitMQ, PostgreSQL e Git.   Considere que os seguintes comandos tenham sido executados no PostgreSQL 14.18.   CREATE TABLE veiculo (     id SERIAL PRIMARY KEY,     nome VARCHAR(50) NOT NULL); CREATE TABLE carro (     placa VARCHAR(7) UNIQUE NOT NULL) INHERITS (veiculo); INSERT INTO veiculo (nome) VALUES ('Bicicleta'); INSERT INTO carro (nome, placa) VALUES ('Tesla Model Y', 'Y1357'), ('BMW X6','W6789'); SELECT * FROM veiculo;   Nesse caso, o comando SELECT * FROM veiculo; apresentará, ao ser executado, o resultado a seguir.   id | nome ----+----------- 1 | Bicicleta
  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”.

PostgreSQL – Herança de Tabelas e o Comando SELECT

Gabarito: Errado. O comando SELECT * FROM veiculo; não retornará apenas a linha da bicicleta: no PostgreSQL, uma consulta a uma tabela-pai inclui, por padrão, as linhas das tabelas-filhas que herdam dela. Como carro herda de veiculo, o resultado trará também os dois carros inseridos, totalizando três linhas. Essa é a regra da herança de tabelas no PostgreSQL, que difere do comportamento de outros SGBDs.

A herança de tabelas é um recurso do modelo objeto-relacional do PostgreSQL que permite que uma tabela (filha) herde as colunas de outra (pai). Quando você cria uma tabela com INHERITS, a tabela filha passa a ter todas as colunas da tabela pai, além das suas próprias colunas. No exemplo, carro herda id e nome de veiculo e adiciona a coluna placa. Os dados inseridos na tabela filha são armazenados nela, mas são visíveis em consultas à tabela pai, a menos que se use a cláusula ONLY.

O comportamento padrão do SELECT em uma tabela que possui descendentes é incluir as linhas de todas as tabelas que herdam dela. Isso é uma característica documentada do PostgreSQL: "Consultas em tabelas pai incluem registros das tabelas filhas". Para consultar apenas a tabela pai, é necessário usar SELECT * FROM ONLY veiculo;. Essa é a pegadinha central da questão: o candidato que conhece o comportamento de outros bancos (onde herança não existe ou não funciona assim) tende a marcar como certo, mas no PostgreSQL o resultado inclui as linhas das filhas.

Vamos verificar o que acontece passo a passo:

  1. CREATE TABLE veiculo (id SERIAL PRIMARY KEY, nome VARCHAR(50) NOT NULL); – cria a tabela pai com as colunas id e nome.

  2. CREATE TABLE carro (placa VARCHAR(7) UNIQUE NOT NULL) INHERITS (veiculo); – cria a tabela filha carro, que herda id e nome e adiciona placa.

  3. INSERT INTO veiculo (nome) VALUES ('Bicicleta'); – insere uma linha na tabela pai.

  4. INSERT INTO carro (nome, placa) VALUES ('Tesla Model Y', 'Y1357'), ('BMW X6','W6789'); – insere duas linhas na tabela filha.

  5. SELECT * FROM veiculo; – como veiculo tem uma tabela filha, a consulta retorna as linhas de veiculo e de carro.

O resultado real seria:

id

nome

1

Bicicleta

2

Tesla Model Y

3

BMW X6

Note que os id dos carros são gerados pela sequência compartilhada (SERIAL), então os valores continuam a sequência após o 1.

A alternativa apresentada no enunciado mostra apenas a linha da bicicleta, o que está incorreto. Portanto, o item é Errado.

1SELECT na tabela-pai
Inclui linhas das filhas
Comportamento padrão
2SELECT com ONLY
Restringe à tabela especificada
Exclui as filhas
3Estrutura
Pai: veiculo (id, nome)
Filha: carro (placa) INHERITS
Herança no PostgreSQL
LEVELsoulevel.com.br
Herança no PostgreSQL: SELECT na tabela-pai (Inclui linhas das filhas, Comportamento padrão); SELECT com ONLY (Restringe à tabela especificada, Exclui as filhas); Estrutura (Pai: veiculo (id, nome), Filha: carro (placa) INHERITS)
NÃO CAIA NESSA!

A banca explora a diferença entre o comportamento do PostgreSQL e o de outros SGBDs. Em bancos como MySQL ou SQL Server, não existe herança de tabelas, então uma consulta à tabela pai retornaria apenas os dados dela. No PostgreSQL, a herança faz com que a consulta inclua as linhas das filhas. O candidato que não conhece esse recurso específico tende a marcar como certo, mas a resposta correta é Errado.

PEGA ESSA DICA!

Para consultar apenas a tabela pai, use SELECT * FROM ONLY veiculo;. Essa é uma dica prática para provas e para o dia a dia. Lembre-se: no PostgreSQL, SELECT em tabela com herança inclui as filhas; ONLY restringe à tabela especificada.

Gabarito: Errado

Link permanente: /questoes/ce417316