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.
- A)after
Errada: AFTER indica o momento do gatilho e pode existir em definições por linha ou por instrução, não sendo exclusivo de statement-level.
- B)truncate
Certa: TRUNCATE só admite trigger em nível de instrução no PostgreSQL, não havendo execução linha a linha.
- C)update
Errada: UPDATE é um evento que pode gerar trigger por linha ou por instrução, então não é exclusivo de nível de instrução.
- D)instead of
Errada: INSTEAD OF é usado principalmente em views e é ligado a operações por linha, não a uma regra exclusiva de statement-level.
- E)before
Errada: BEFORE é apenas o momento de execução do trigger e pode ser usado em mais de um nível, dependendo do evento.
Gabarito: B
No PostgreSQL, alguns eventos de trigger podem ser configurados para rodar por linha (row-level) ou por instrução (statement-level), mas nem todos se comportam igual. A palavra-chave TRUNCATE é especial: ela dispara trigger apenas em nível de instrução, porque o comando apaga o conteúdo da tabela de uma vez, sem percorrer linha por linha. Na prática, isso significa que você não cria trigger de TRUNCATE para cada registro individual, até porque não existe "linha afetada" como em UPDATE ou DELETE. O PostgreSQL trata TRUNCATE como operação global na tabela, então o gatilho, quando existir, é sempre FOR EACH STATEMENT. Já AFTER, BEFORE e UPDATE não são exclusivos de nível de instrução. BEFORE e AFTER são tempos de execução de trigger, e podem aparecer em contexto de linha ou de instrução, dependendo do evento e da definição. UPDATE, por sua vez, é apenas um evento de DML, não uma regra de nível por si só. Então o gabarito B está correto porque TRUNCATE é o comando que, no contexto de triggers no PostgreSQL, só pode ser definido para execução em nível de instrução. Essa é uma peculiaridade clássica cobrada em prova: TRUNCATE não tem versão por linha.