Considere que os comandos a seguir tenham sido executados n...

Próximas questões
Com base no mesmo assunto
Q3407625 Banco de Dados
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.
Imagem associada para resolução da questão

Nesse caso, o comando SELECT * FROM public.servidor; apresentará, ao ser executado, o resultado a seguir.
Imagem associada para resolução da questão
Alternativas

Comentários

Veja os comentários dos nossos alunos

O erro está na ausência do campo Matrícula, que também será impresso (todos preechidos com NULL, já que não foi atribuído valor de matrícula a nenhum dos nomes) após o comando SELECT * FROM public.servidor;

Eu executei o sql no postgres e a ordem dos Ids veio 1,2,1 e não 1,2,3. Acredito que aí está o erro. A tabela "magistrado" tem sua própria sequência de Ids independente da sequência da tabela "servidor"

Segundo o deepseek:

Veja a definição:

CREATE TABLE public.servidor (

  idServidor INT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,

  nome VARCHAR(30)

);

CREATE TABLE public.magistrado (

  idServidor INT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,

  matricula int

) INHERITS (public.servidor);

Aqui, a tabela filha  também declara .

Isso significa que a coluna  em  é uma identidade separada da de , não compartilhando a sequência.

No PostgreSQL, ao usar herança, as sequências de identity não são compartilhadas automaticamente entre pai e filho, a menos que seja configurado.

Assim, quando inserimos:

INSERT INTO public.servidor (nome) VALUES ('Pedro'), ('João');

-- idServidor: 1, 2 (usando a sequência de servidor)

INSERT INTO public.magistrado (nome) VALUES ('Maria');

-- idServidor em magistrado começa sua própria sequência, geralmente em 1.

Isso faria com que  tivesse  na tabela , não .

Portanto, o resultado do  seria:

idServidor | nome

---+

  1 | Pedro

  2 | João

  1 | Maria

Exatamente o que o colega Luiz Fernando comentou!

GABARITO: ERRADO (correta a decisão da banca)



DESCRIÇÃO (Explicação técnica):

Apesar de ser verdade que, no PostgreSQL, um

inclui registros das tabelas filhas (herança), o resultado apresentado no enunciado está incorreto por causa de um detalhe técnico essencial: o uso de IDENTITY / SERIAL em tabelas com herança.

No código apresentado:

  • define
  • também define seu próprio como IDENTITY, apesar de herdar de .

⚠️ Consequência importante (pegadinha clássica):

Cada tabela (servidor e magistrado) possui sua própria sequência de geração automática de IDs.

Ou seja:

  • os IDs não são compartilhados entre a tabela pai e a tabela filha;
  • o PostgreSQL não garante unicidade global do entre tabelas em herança.
  • :
  • Pedro →
  • João →
  • :
  • Maria → (nova sequência da tabela filha)

Seria algo como:

Não:

Portanto, o erro do item não está na herança, mas na suposição equivocada de que o IDENTITY é global e sequencial entre pai e filho, o que não é verdade no PostgreSQL.

Esse é um ponto técnico refinado, perfeitamente válido para justificar o gabarito ERRADO, conforme padrão de cobrança de concursos até 2025.

PONTO-CHAVE (Pegadinha da banca):

Confundir herança de dados com compartilhamento de sequência/IDENTITYcada tabela herdeira tem sua própria sequência.

LEMBRE-SE (Frase de memorização):

Em herança no PostgreSQL, o SELECT sobe dados, mas o IDENTITY não é compartilhado.

Acrescentando os colegas:

Ao realizar:

SELECT * FROM public.servidor;

o PostgreSQL retorna também os registros das tabelas filhas (magistrado), por padrão.

Para consultar apenas a tabela pai:

SELECT * FROM ONLY public.servidor;

Clique para visualizar este comentário

Visualize os comentários desta questão clicando no botão abaixo