0
0
PostgreSQLquery~20 mins

Row-level vs statement-level triggers in PostgreSQL - Practice Questions

Choose your learning style9 modes available
Challenge - 5 Problems
🎖️
Trigger Mastery
Get all challenges correct to earn this badge!
Test your skills under time pressure!
🧠 Conceptual
intermediate
2:00remaining
Difference between row-level and statement-level triggers

Which statement correctly describes the difference between row-level and statement-level triggers in PostgreSQL?

ARow-level triggers execute once for each row affected by the triggering statement, while statement-level triggers execute once per SQL statement regardless of the number of rows affected.
BRow-level triggers execute once per SQL statement, while statement-level triggers execute once for each row affected by the statement.
CBoth row-level and statement-level triggers execute once per row affected by the statement.
DBoth row-level and statement-level triggers execute once per SQL statement regardless of rows affected.
Attempts:
2 left
💡 Hint

Think about how many times the trigger runs when multiple rows are updated.

query_result
intermediate
2:00remaining
Output rows affected by row-level trigger

Given a table employees with 3 rows, and a row-level AFTER UPDATE trigger that increments a counter each time it fires, what will be the value of the counter after running UPDATE employees SET salary = salary * 1.1;?

PostgreSQL
CREATE TABLE employees(id SERIAL PRIMARY KEY, salary NUMERIC);
INSERT INTO employees(salary) VALUES (1000), (2000), (3000);

CREATE TABLE trigger_log(counter INT);
INSERT INTO trigger_log(counter) VALUES (0);

CREATE OR REPLACE FUNCTION increment_counter() RETURNS TRIGGER AS $$
BEGIN
  UPDATE trigger_log SET counter = counter + 1;
  RETURN NEW;
END;
$$ LANGUAGE plpgsql;

CREATE TRIGGER update_counter AFTER UPDATE ON employees
FOR EACH ROW EXECUTE FUNCTION increment_counter();

-- Now run:
UPDATE employees SET salary = salary * 1.1;
A1
B3
C0
DError due to trigger
Attempts:
2 left
💡 Hint

Remember row-level triggers run once per row updated.

📝 Syntax
advanced
2:00remaining
Correct syntax for creating a statement-level trigger

Which option shows the correct syntax to create a statement-level BEFORE INSERT trigger on table orders in PostgreSQL?

ACREATE TRIGGER trg_before_insert BEFORE INSERT ON orders EXECUTE FUNCTION trg_func();
BCREATE TRIGGER trg_before_insert BEFORE INSERT ON orders FOR EACH ROW EXECUTE FUNCTION trg_func();
CCREATE TRIGGER trg_before_insert BEFORE INSERT ON orders FOR EACH STATEMENT EXECUTE FUNCTION trg_func();
DCREATE TRIGGER trg_before_insert ON orders BEFORE INSERT FOR EACH STATEMENT EXECUTE FUNCTION trg_func();
Attempts:
2 left
💡 Hint

Look for the correct order of clauses and the keyword for statement-level triggers.

optimization
advanced
2:00remaining
Choosing trigger type for performance

You want to log every update on a large table but only need one log entry per update statement, not per row. Which trigger type is best for performance?

AStatement-level trigger, because it runs once per statement regardless of rows affected.
BRow-level trigger, because it logs each row change individually.
CRow-level trigger with a condition to limit logging.
DNo trigger, use application code instead.
Attempts:
2 left
💡 Hint

Think about how many times the trigger runs for many rows.

🔧 Debug
expert
2:00remaining
Why does this row-level trigger cause an error?

Consider this trigger function and trigger creation:

CREATE OR REPLACE FUNCTION trg_func() RETURNS TRIGGER AS $$
BEGIN
  IF NEW.salary > 10000 THEN
    RAISE EXCEPTION 'Salary too high';
  END IF;
  RETURN NEW;
END;
$$ LANGUAGE plpgsql;

CREATE TRIGGER trg_check_salary BEFORE UPDATE ON employees
FOR EACH STATEMENT EXECUTE FUNCTION trg_func();

Why does this cause an error when updating rows?

AThe trigger must be FOR EACH ROW to access OLD and NEW.
BThe trigger function must return VOID for statement-level triggers.
CThe trigger event must be AFTER UPDATE for this function.
DThe trigger function references NEW, which is not available in statement-level triggers.
Attempts:
2 left
💡 Hint

Think about what data is available in statement-level triggers.