Introduction
Triggers run automatically when certain events happen in the database. Knowing their order helps control what happens first and last.
Jump into concepts and practice - no test required
CREATE TRIGGER trigger_name { BEFORE | AFTER | INSTEAD OF } { event [ OR ... ] } ON table_name [ FROM referenced_table ] [ NOT DEFERRABLE | [ DEFERRABLE ] { INITIALLY IMMEDIATE | INITIALLY DEFERRED } ] [ FOR [ EACH ] { ROW | STATEMENT } ] [ WHEN ( condition ) ] EXECUTE FUNCTION function_name ( arguments );
CREATE TRIGGER trg_before_insert_1 BEFORE INSERT ON employees FOR EACH ROW EXECUTE FUNCTION log_insert();
CREATE TRIGGER trg_after_insert_2 AFTER INSERT ON employees FOR EACH ROW EXECUTE FUNCTION update_stats();
CREATE TABLE test_order ( id SERIAL PRIMARY KEY, info TEXT ); CREATE OR REPLACE FUNCTION trg_func_1() RETURNS trigger AS $$ BEGIN RAISE NOTICE 'Trigger 1 executed'; RETURN NEW; END; $$ LANGUAGE plpgsql; CREATE OR REPLACE FUNCTION trg_func_2() RETURNS trigger AS $$ BEGIN RAISE NOTICE 'Trigger 2 executed'; RETURN NEW; END; $$ LANGUAGE plpgsql; CREATE TRIGGER trigger1 BEFORE INSERT ON test_order FOR EACH ROW EXECUTE FUNCTION trg_func_1(); CREATE TRIGGER trigger2 BEFORE INSERT ON test_order FOR EACH ROW EXECUTE FUNCTION trg_func_2(); INSERT INTO test_order (info) VALUES ('test');
alpha_trigger on a table users in PostgreSQL?orders: alpha_trigger and beta_trigger, both BEFORE INSERT triggers. Which trigger runs first when a new row is inserted?products: zeta_trigger and alpha_trigger. You want zeta_trigger to run before alpha_trigger. What is the problem with this setup?customers: clean_up, archive, and notify. You want archive to run first, then clean_up, then notify. How should you rename the triggers to ensure this execution order?