Challenge - 5 Problems
Trigger Execution Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ query_result
intermediate2:00remaining
Order of BEFORE triggers on INSERT
Consider a table with two BEFORE INSERT triggers named trigger_a and trigger_b. If both triggers are set to fire BEFORE INSERT, in what order will they execute by default?
PostgreSQL
CREATE TABLE test_order(id SERIAL PRIMARY KEY, val TEXT); CREATE FUNCTION trigger_a_func() RETURNS trigger AS $$ BEGIN RAISE NOTICE 'Trigger A fired'; RETURN NEW; END; $$ LANGUAGE plpgsql; CREATE FUNCTION trigger_b_func() RETURNS trigger AS $$ BEGIN RAISE NOTICE 'Trigger B fired'; RETURN NEW; END; $$ LANGUAGE plpgsql; CREATE TRIGGER trigger_a BEFORE INSERT ON test_order FOR EACH ROW EXECUTE FUNCTION trigger_a_func(); CREATE TRIGGER trigger_b BEFORE INSERT ON test_order FOR EACH ROW EXECUTE FUNCTION trigger_b_func(); INSERT INTO test_order(val) VALUES ('test');
Attempts:
2 left
💡 Hint
PostgreSQL executes triggers in alphabetical order by trigger name when no explicit ordering is set.
✗ Incorrect
PostgreSQL executes multiple triggers of the same type on the same event in alphabetical order by trigger name. Since 'trigger_a' comes before 'trigger_b', it fires first.
❓ query_result
intermediate2:00remaining
Execution order of AFTER triggers on UPDATE
A table has two AFTER UPDATE triggers: update_first and update_second. Both are row-level triggers. Which trigger executes first after an UPDATE statement?
PostgreSQL
CREATE TABLE update_test(id SERIAL PRIMARY KEY, data TEXT); INSERT INTO update_test(data) VALUES ('initial'); CREATE FUNCTION update_first_func() RETURNS trigger AS $$ BEGIN RAISE NOTICE 'update_first fired'; RETURN NEW; END; $$ LANGUAGE plpgsql; CREATE FUNCTION update_second_func() RETURNS trigger AS $$ BEGIN RAISE NOTICE 'update_second fired'; RETURN NEW; END; $$ LANGUAGE plpgsql; CREATE TRIGGER update_first AFTER UPDATE ON update_test FOR EACH ROW EXECUTE FUNCTION update_first_func(); CREATE TRIGGER update_second AFTER UPDATE ON update_test FOR EACH ROW EXECUTE FUNCTION update_second_func(); UPDATE update_test SET data = 'changed' WHERE id = 1;
Attempts:
2 left
💡 Hint
Trigger execution order is alphabetical by trigger name if no other ordering is specified.
✗ Incorrect
PostgreSQL executes AFTER triggers in alphabetical order by trigger name. Since 'update_first' comes before 'update_second', it fires first.
🧠 Conceptual
advanced2:30remaining
Effect of trigger firing order on data modification
If two BEFORE UPDATE triggers modify the same column in a row, how does the firing order affect the final value stored in that column?
Attempts:
2 left
💡 Hint
Each trigger modifies the row data passed to the next trigger.
✗ Incorrect
In BEFORE triggers, the row data is passed along the chain. Each trigger can modify the row, and the last trigger's changes are what get stored.
📝 Syntax
advanced2:30remaining
Correct syntax to specify trigger firing order
Which of the following statements correctly sets the firing order of two triggers so that trigger_b fires before trigger_a on INSERT?
Attempts:
2 left
💡 Hint
Check PostgreSQL documentation on trigger ordering capabilities.
✗ Incorrect
PostgreSQL does not provide syntax to explicitly set trigger firing order. The order is determined by trigger name alphabetical order.
🔧 Debug
expert3:00remaining
Diagnosing unexpected trigger execution order
A developer created two BEFORE INSERT triggers named 'a_trigger' and 'b_trigger'. They expect 'b_trigger' to fire first, but 'a_trigger' fires first instead. What is the most likely cause?
Attempts:
2 left
💡 Hint
Consider how PostgreSQL determines trigger firing order by default.
✗ Incorrect
PostgreSQL executes multiple triggers of the same type on the same event in alphabetical order by trigger name. Since 'a_trigger' comes before 'b_trigger', it fires first.