Os gatilhos no PostgreSQL são funções que são executadas automaticamente em resposta a eventos específicos em uma tabela, como INSERT, UPDATE ou DELETE. Um acionador AFTER é executado após a conclusão do evento de acionamento, permitindo que você acesse o estado final dos dados.
Uso
Os acionadores AFTER são usados quando você precisa executar ações após um evento de modificação de dados, garantindo que quaisquer operações dependentes ocorram somente após a conclusão bem-sucedida do evento inicial. Eles são definidos usando a instrução CREATE TRIGGER.
CREATETRIGGER trigger_name
AFTER event [OR event ...]ON table_name
FOR EACH ROWEXECUTEFUNCTION function_name();Tecnologia
Nessa sintaxe, AFTER event especifica o evento (INSERT, UPDATE, DELETE) que ativa o acionador, e function_name() é a função a ser executada após o evento.
Exemplos
1. Acionador básico AFTER INSERT
CREATEORREPLACEFUNCTION log_new_user()RETURNSTRIGGERAS $$
BEGININSERTINTO user_logs(user_id,action, log_time)VALUES(NEW.id,'User Created',NOW());RETURN NEW;END;
$$ LANGUAGE plpgsql;CREATETRIGGER after_user_insert
AFTERINSERTON users
FOR EACH ROWEXECUTEFUNCTION log_new_user();Tecnologia
Este exemplo registra a entrada de um novo usuário em user_logs após uma inserção na tabela users.
2. Acionador AFTER UPDATE
CREATEORREPLACEFUNCTION update_inventory_log()RETURNSTRIGGERAS $$
BEGININSERTINTO inventory_logs(product_id, change, log_time)VALUES(NEW.product_id, NEW.quantity - OLD.quantity,NOW());RETURN NEW;END;
$$ LANGUAGE plpgsql;CREATETRIGGER after_inventory_update
AFTERUPDATEON inventory
FOR EACH ROWEXECUTEFUNCTION update_inventory_log();Tecnologia
Esse acionador registra a alteração da quantidade de um produto em inventory_logs depois que a tabela inventory é atualizada.
3. Acionador AFTER DELETE com lógica condicional
CREATEORREPLACEFUNCTION log_deleted_order()RETURNSTRIGGERAS $$
BEGINIF OLD.status='completed'THENINSERTINTO order_logs(order_id,action, log_time)VALUES(OLD.id,'Completed Order Deleted',NOW());ENDIF;RETURN OLD;END;
$$ LANGUAGE plpgsql;CREATETRIGGER after_order_delete
AFTERDELETEON orders
FOR EACH ROWEXECUTEFUNCTION log_deleted_order();Tecnologia
Esse exemplo registra a exclusão de pedidos concluídos da tabela orders, somente se o status do pedido for "concluído".
Dicas e práticas recomendadas
Use acionadores AFTER para operações dependentes. Aplique-as quando as ações subsequentes dependerem da conclusão da transação original.
Mantenha as funções de acionamento eficientes. Certifique-se de que a função executada pelo acionador seja otimizada para evitar a lentidão das transações.
Evite lógicas complexas. Simplifique a lógica dentro dos acionadores para manter a clareza e a facilidade de manutenção.
Teste os acionadores minuciosamente. Certifique-se de que os acionadores não afetem involuntariamente a lógica do aplicativo, testando-os de forma abrangente.
Documentar o comportamento do acionador. Mantenha uma documentação clara do que cada acionador foi projetado para fazer, especialmente em aplicativos maiores.
Monitore o impacto no desempenho. Use ferramentas de registro ou monitoramento para rastrear o impacto do desempenho dos acionadores nos bancos de dados de produção.
Compreender as interações das transações. Os acionadores AFTER fazem parte da transação; se ocorrer um erro na função do acionador, toda a transação poderá ser revertida.
Considere as limitações. Esteja ciente dos possíveis conflitos com restrições de chave estrangeira ou ações em cascata ao usar acionadores AFTER.
Gerenciar o ciclo de vida do acionador. Você sabe como desativar ou remover um acionador quando ele não for mais necessário usando ALTER TABLE ou DROP TRIGGER.
Os gatilhos no PostgreSQL são funções que são executadas automaticamente em resposta a eventos específicos em uma tabela, como INSERT, UPDATE ou DELETE. Um acionador AFTER é executado após a conclusão do evento de acionamento, permitindo que você acesse o estado final dos dados.
Uso
Os acionadores AFTER são usados quando você precisa executar ações após um evento de modificação de dados, garantindo que quaisquer operações dependentes ocorram somente após a conclusão bem-sucedida do evento inicial. Eles são definidos usando a instrução
CREATE TRIGGER.Nessa sintaxe,
AFTER eventespecifica o evento (INSERT, UPDATE, DELETE) que ativa o acionador, efunction_name()é a função a ser executada após o evento.Exemplos
1. Acionador básico AFTER INSERT
Este exemplo registra a entrada de um novo usuário em
user_logsapós uma inserção na tabelausers.2. Acionador AFTER UPDATE
Esse acionador registra a alteração da quantidade de um produto em
inventory_logsdepois que a tabelainventoryé atualizada.3. Acionador AFTER DELETE com lógica condicional
Esse exemplo registra a exclusão de pedidos concluídos da tabela
orders, somente se o status do pedido for "concluído".Dicas e práticas recomendadas
ALTER TABLEouDROP TRIGGER.