0
0
PostgreSQLquery~20 mins

Trigger execution order in PostgreSQL - Practice Problems & Coding Challenges

Choose your learning style9 modes available
Challenge - 5 Problems
🎖️
Trigger Execution Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
query_result
intermediate
2: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');
Atrigger_a fires first, then trigger_b
Btrigger_b fires first, then trigger_a
CBoth triggers fire simultaneously
DThe order is random and cannot be predicted
Attempts:
2 left
💡 Hint
PostgreSQL executes triggers in alphabetical order by trigger name when no explicit ordering is set.
query_result
intermediate
2: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;
Aupdate_second fires before update_first
Bupdate_first fires before update_second
CBoth triggers fire simultaneously
DThe order depends on the order of UPDATE statement execution
Attempts:
2 left
💡 Hint
Trigger execution order is alphabetical by trigger name if no other ordering is specified.
🧠 Conceptual
advanced
2: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?
AThe last trigger to fire determines the final column value
BThe first trigger to fire determines the final column value
CBoth triggers' changes are merged automatically
DThe database throws an error due to conflict
Attempts:
2 left
💡 Hint
Each trigger modifies the row data passed to the next trigger.
📝 Syntax
advanced
2: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?
ACREATE TRIGGER trigger_b BEFORE INSERT ON table_name FOR EACH ROW EXECUTE FUNCTION func_b(); CREATE TRIGGER trigger_a BEFORE INSERT ON table_name FOR EACH ROW EXECUTE FUNCTION func_a();
BALTER TRIGGER trigger_b ON table_name ORDER BEFORE trigger_a;
CPostgreSQL does not support explicit trigger firing order; order depends on trigger name alphabetical order.
DCREATE TRIGGER trigger_b BEFORE INSERT ON table_name FOR EACH ROW EXECUTE FUNCTION func_b() WHEN (TRUE); CREATE TRIGGER trigger_a BEFORE INSERT ON table_name FOR EACH ROW EXECUTE FUNCTION func_a();
Attempts:
2 left
💡 Hint
Check PostgreSQL documentation on trigger ordering capabilities.
🔧 Debug
expert
3: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?
ATriggers always fire in creation order, so the first created fires first
BThe database is misconfigured and triggers are firing incorrectly
CThe trigger firing order is random and cannot be controlled
D'a_trigger' comes before 'b_trigger' alphabetically, so it fires first
Attempts:
2 left
💡 Hint
Consider how PostgreSQL determines trigger firing order by default.