Pular para o conteúdo principal

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

Banco de DadosPostgreSQL
Código
ce190856
Banca
CESPE / CEBRASPE
Órgão
TST
Ano
2024
Nível
Médio
Cargo
Técnico Judiciário - Área: Apoio Especializado - Especialidade: Programação
Assinale a opção que indica o comando que só pode ser definido para executar em nível de instrução no banco de dados PostgreSQL.
  1. Aafter
  2. Btruncate
  3. Cupdate
  4. Dinstead of
  5. Ebefore
Revelar gabarito e comentário

GabaritoB — truncate

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: Gatilhos (Triggers) – Nível de Instrução vs. Nível de Linha

Gabarito: letra B (truncate). No PostgreSQL, o comando TRUNCATE só pode acionar gatilhos definidos em nível de instrução (FOR EACH STATEMENT), pois é uma operação de DDL que não trabalha com linhas individuais. Já comandos como after, update, instead of e before podem ser configurados em nível de linha (FOR EACH ROW) ou de instrução, exceto instead of, que é sempre row-level em views.

A banca testa o conhecimento sobre os tipos de gatilho no PostgreSQL: a diferença entre o escopo de execução (linha vs. instrução) e quais eventos aceitam cada nível.

Comando

Nível de Gatilho Permitido

Tipo de Operação

Observação

TRUNCATE

Somente FOR EACH STATEMENT

DDL

Único comando que só aceita nível de instrução

AFTER

FOR EACH ROW ou FOR EACH STATEMENT

DML

Pode ser definido em ambos os níveis

BEFORE

FOR EACH ROW ou FOR EACH STATEMENT

DML

Pode ser definido em ambos os níveis

UPDATE

FOR EACH ROW ou FOR EACH STATEMENT

DML

Pode ser definido em ambos os níveis

INSTEAD OF

Somente FOR EACH ROW

DML (em views)

Sempre row-level, nunca statement-level

1Nível de instrução (FOR EACH STATEMENT)
TRUNCATE (DDL)
CREATE, ALTER, DROP
2Nível de linha (FOR EACH ROW)
INSERT, UPDATE, DELETE (DML)
INSTEAD OF (sempre row-level)
3Ambos os níveis
AFTER (DML)
BEFORE (DML)
Gatilhos no PostgreSQL
LEVELsoulevel.com.br
Gatilhos no PostgreSQL: Nível de instrução (FOR EACH STATEMENT) (TRUNCATE (DDL), CREATE, ALTER, DROP); Nível de linha (FOR EACH ROW) (INSERT, UPDATE, DELETE (DML), INSTEAD OF (sempre row-level)); Ambos os níveis (AFTER (DML), BEFORE (DML))

Alternativa A — ❌ Incorreta

AFTER é um gatilho de evento DML (INSERT, UPDATE, DELETE) que pode ser definido tanto como FOR EACH ROW quanto FOR EACH STATEMENT. Portanto, não é restrito a nível de instrução.

Alternativa B — ✅ Correta ⟵ GABARITO

O TRUNCATE é um comando DDL que remove todas as linhas de uma tabela de uma só vez, sem percorrê-las uma a uma. Por isso, o PostgreSQL só permite gatilhos associados a TRUNCATE como FOR EACH STATEMENT. Qualquer trigger nesse evento deve ser statement-level.

Alternativa C — ❌ Incorreta

UPDATE é um comando DML e pode disparar gatilhos tanto row-level quanto statement-level. Não há restrição de nível.

Alternativa D — ❌ Incorreta

INSTEAD OF é usado tipicamente em views e, no PostgreSQL, é sempre FOR EACH ROW (nível de linha). Ele não pode ser definido em nível de instrução.

Alternativa E — ❌ Incorreta

BEFORE é um gatilho DML que, assim como AFTER, pode ser configurado para executar por linha ou por instrução. Logo, não se limita ao nível de instrução.

PEGA ESSA DICA!

No PostgreSQL, escreva sempre os gatilhos associados a eventos DDL (TRUNCATE, CREATE, ALTER, DROP) como FOR EACH STATEMENT. Já eventos DML (INSERT, UPDATE, DELETE) aceitam ambos os níveis; escolha FOR EACH ROW quando precisar acessar dados da linha modificada. Os gatilhos INSTEAD OF são naturalmente row-level e aplicados a views.

Gabarito: letra B (truncate).

Link permanente: /questoes/ce190856