Considere a seguinte situação hipotética: Uma equipe está d...

Próximas questões
Com base no mesmo assunto
Q4071618 Banco de Dados
Considere a seguinte situação hipotética:
Uma equipe está desenvolvendo um sistema de pedidos, utilizando PostgreSQL. Existe uma tabela pedidos com as colunas:

id
cliente_id
valor_total
status
criado_em
atualizado_em

Durante uma auditoria interna, um analista de banco de dados identificou que o campo atualizado_em nem sempre reflete a última modificação do registro, pois a aplicação depende do backend para atualizar esse campo manualmente. Em alguns casos, desenvolvedores esqueceram de atualizar o timestamp em operações de UPDATE, gerando inconsistência nos relatórios.
A equipe decidiu resolver o problema no nível do banco de dados, garantindo que o campo atualizado_em seja atualizado automaticamente sempre que houver alteração no registro.

Assinale a alternativa que apresenta o comando que garante que o campo atualizado_em seja atualizado automaticamente sempre que um registro da tabela pedidos for modificado:
Alternativas

Gabarito comentado

Confira o gabarito comentado por um dos nossos professores

Gabarito: D

Fundamento decisivo: A decisão estava em identificar o mecanismo que altera a linha em processamento antes da gravação, permitindo preencher automaticamente atualizado_em no próprio registro.

Tema central: Triggers no PostgreSQL
Análise das alternativas
A
Errada
Está errada porque CHECK só valida uma condição lógica; não atribui valor ao campo. Mesmo que verifique relação entre atualizado_em e criado_em, isso não faz o banco preencher automaticamente atualizado_em em cada UPDATE.
B
Errada
Está errada porque a view com NOW() apenas mostra um valor em consulta. Isso não grava o timestamp na coluna atualizado_em da tabela pedidos, portanto não corrige a inconsistência do dado armazenado.
C
Errada
Está errada porque propõe AFTER UPDATE com um novo UPDATE na mesma tabela, quando o ajuste do próprio registro deve ser feito antes da gravação da linha em processamento.
D
Certa
A alternativa D está correta porque usa uma trigger BEFORE UPDATE, na qual a função pode definir NEW.atualizado_em = NOW() antes da escrita definitiva da linha.
Pegadinha da questão
A confusão era achar que qualquer solução ligada a UPDATE resolveria igualmente, sem distinguir validar valor, exibir valor e persistir o valor no próprio registro.
Dica para questões semelhantes
  • Se a exigência é gravar automaticamente um valor no próprio registro alterado, procure mecanismo que modifique a linha em processamento antes da escrita.
  • CHECK serve para validar regra, não para preencher campo automaticamente.
  • Valor calculado em view não substitui valor persistido na tabela base.
  • Em ajuste do próprio registro atualizado, diferencie trigger BEFORE UPDATE que altera NEW de solução AFTER UPDATE com novo UPDATE na tabela.

Clique para visualizar este gabarito

Visualize o gabarito desta questão clicando no botão abaixo