Jump into concepts and practice - no test required
or
Recommended
Test this pattern10 questions across easy, medium, and hard to know if this pattern is strong
Recall & Review
beginner
What is an AFTER trigger in PostgreSQL?
An AFTER trigger is a database trigger that runs after the triggering SQL statement (INSERT, UPDATE, DELETE) has completed successfully.
Click to reveal answer
beginner
When does an AFTER trigger execute in relation to the triggering SQL statement?
It executes only after the triggering statement has completed successfully.
Click to reveal answer
intermediate
Can an AFTER trigger modify the data of the triggering statement in PostgreSQL?
No, AFTER triggers cannot modify the data of the triggering statement because they run after the statement completes.
Click to reveal answer
intermediate
What happens if an AFTER trigger raises an error in PostgreSQL?
If an AFTER trigger raises an error, the entire transaction is rolled back, including the original statement and any other changes.
Click to reveal answer
intermediate
Why would you use an AFTER trigger instead of a BEFORE trigger?
Use AFTER triggers when you want to perform actions that depend on the statement being successfully completed, such as logging or cascading changes.
Click to reveal answer
When does an AFTER trigger run in PostgreSQL?
AAfter the triggering statement completes successfully
BAt the same time as the triggering statement
CBefore the triggering statement executes
DOnly if the triggering statement fails
✗ Incorrect
AFTER triggers run only after the triggering statement has completed successfully.
Can an AFTER trigger modify the row data being inserted or updated?
AYes, it can modify the data before insertion
BOnly if the trigger is a BEFORE trigger
CYes, but only for DELETE statements
DNo, it runs after the data is already changed
✗ Incorrect
AFTER triggers run after the data change, so they cannot modify the row data of the triggering statement.
What happens if an AFTER trigger raises an error during execution?
AThe entire transaction is rolled back
BOnly the trigger action is rolled back
CThe error is ignored and the transaction commits
DThe trigger retries automatically
✗ Incorrect
An error in an AFTER trigger causes the entire transaction to roll back.
Which of the following is a common use case for AFTER triggers?
AModifying data before update
BLogging changes after data modification
CValidating data before insert
DPreventing deletes
✗ Incorrect
AFTER triggers are often used for logging or actions that depend on successful completion of the statement.
In PostgreSQL, can an AFTER trigger be fired for a statement that fails?
AYes, always
BOnly for DELETE statements
CNo, only if the statement succeeds
DOnly if the trigger is set to fire on error
✗ Incorrect
AFTER triggers only fire if the triggering statement completes successfully.
Explain the behavior and timing of an AFTER trigger in PostgreSQL.
Think about when the trigger runs and what it can or cannot do.
You got /4 concepts.
Describe scenarios where using an AFTER trigger is more appropriate than a BEFORE trigger.
Consider what you want to do after data is safely changed.
You got /4 concepts.
Practice
(1/5)
1. What is the main purpose of an AFTER trigger in PostgreSQL?
easy
A. To execute a function after the main database operation completes successfully
B. To prevent a database operation from happening
C. To execute a function before the database operation starts
D. To rollback the transaction if an error occurs
Solution
Step 1: Understand the timing of AFTER triggers
AFTER triggers run only after the main database action (INSERT, UPDATE, DELETE) has completed successfully.
Step 2: Identify the purpose of AFTER triggers
They are used to perform actions like logging or notifications after the main operation finishes.
Final Answer:
To execute a function after the main database operation completes successfully -> Option A
Quick Check:
AFTER trigger = runs after operation [OK]
Hint: AFTER triggers run only after successful main actions [OK]
Common Mistakes:
Confusing AFTER with BEFORE triggers
Thinking AFTER triggers can stop the main operation
Assuming AFTER triggers run before the operation
2. Which of the following is the correct syntax to create an AFTER INSERT trigger in PostgreSQL?
easy
A. CREATE TRIGGER trg AFTER INSERT ON table_name FOR EACH ROW EXECUTE FUNCTION func_name();
B. CREATE TRIGGER trg AFTER INSERT ON table_name EXECUTE FUNCTION func_name();
C. CREATE TRIGGER trg BEFORE INSERT ON table_name EXECUTE FUNCTION func_name();
D. CREATE TRIGGER trg AFTER INSERT ON table_name FOR EACH STATEMENT EXECUTE FUNCTION func_name();
Solution
Step 1: Recall the correct CREATE TRIGGER syntax
PostgreSQL requires specifying FOR EACH ROW or FOR EACH STATEMENT for triggers.
Step 2: Identify the correct syntax for AFTER INSERT
CREATE TRIGGER trg AFTER INSERT ON table_name FOR EACH ROW EXECUTE FUNCTION func_name(); correctly uses AFTER INSERT ON table_name FOR EACH ROW EXECUTE FUNCTION func_name();
Final Answer:
CREATE TRIGGER trg AFTER INSERT ON table_name FOR EACH ROW EXECUTE FUNCTION func_name(); -> Option A
Quick Check:
AFTER INSERT + FOR EACH ROW + EXECUTE FUNCTION = CREATE TRIGGER trg AFTER INSERT ON table_name FOR EACH ROW EXECUTE FUNCTION func_name(); [OK]
Hint: AFTER triggers need FOR EACH ROW or STATEMENT [OK]
Common Mistakes:
Omitting FOR EACH ROW or FOR EACH STATEMENT
Using BEFORE instead of AFTER
Using EXECUTE PROCEDURE instead of EXECUTE FUNCTION in modern PostgreSQL
3. Given the following trigger and table, what will be the output after inserting a row?
CREATE TABLE users(id SERIAL PRIMARY KEY, name TEXT);
CREATE FUNCTION log_insert() RETURNS trigger AS $$
BEGIN
RAISE NOTICE 'Inserted user: %', NEW.name;
RETURN NEW;
END;
$$ LANGUAGE plpgsql;
CREATE TRIGGER after_user_insert AFTER INSERT ON users FOR EACH ROW EXECUTE FUNCTION log_insert();
INSERT INTO users(name) VALUES ('Alice');
medium
A. No output, the insert happens silently
B. An error occurs because RETURN NEW is invalid in AFTER trigger
C. The insert is rolled back due to the trigger
D. A notice message: 'Inserted user: Alice'
Solution
Step 1: Understand the trigger function behavior
The function raises a NOTICE with the inserted user's name after insert.
Step 2: Recognize AFTER trigger effects
AFTER triggers run after the insert, so the notice will be shown, and the insert completes successfully.
Final Answer:
A notice message: 'Inserted user: Alice' -> Option D
Quick Check:
AFTER trigger raises notice = A notice message: 'Inserted user: Alice' [OK]
Hint: AFTER triggers can raise notices after insert [OK]
Common Mistakes:
Thinking RETURN NEW is invalid in AFTER triggers
Expecting no output from the trigger
Assuming the insert is rolled back
4. You created an AFTER UPDATE trigger but it never fires. Which of the following is the most likely cause?
medium
A. The trigger was created as BEFORE UPDATE instead of AFTER UPDATE
B. The UPDATE statement does not change any column values
C. The trigger function does not return NEW or OLD
D. The trigger is defined FOR EACH STATEMENT but the function expects FOR EACH ROW
Solution
Step 1: Understand when AFTER UPDATE triggers fire
AFTER UPDATE triggers fire only if the UPDATE actually changes data.
Step 2: Analyze the cause of no trigger firing
If the UPDATE sets columns to their existing values, no actual change occurs, so the trigger does not fire.
Final Answer:
The UPDATE statement does not change any column values -> Option B
Quick Check:
UPDATE with no change = no AFTER trigger fire [OK]
Hint: AFTER UPDATE triggers fire only on actual data changes [OK]
Common Mistakes:
Assuming triggers fire even if no data changes
Confusing BEFORE and AFTER triggers
Not matching trigger function with trigger type
5. You want to log every DELETE on a table after it happens, but only if the deleted row's status is 'active'. Which is the best way to implement this using an AFTER trigger?
hard
A. Create an AFTER DELETE trigger that logs all deletes without checking status
B. Create a BEFORE DELETE trigger that checks OLD.status and prevents deletion if not 'active'
C. Create an AFTER DELETE trigger that checks if OLD.status = 'active' inside the trigger function before logging
D. Create a BEFORE DELETE trigger that logs only if OLD.status = 'active'
Solution
Step 1: Understand the requirement for conditional logging after delete
We want to log only after the delete happens and only for rows with status 'active'.
Step 2: Choose the correct trigger timing and condition
AFTER DELETE trigger can access OLD row data and conditionally log if OLD.status = 'active'.
Final Answer:
Create an AFTER DELETE trigger that checks if OLD.status = 'active' inside the trigger function before logging -> Option C
Quick Check:
Conditional logging after delete = AFTER trigger with check [OK]
Hint: Use AFTER DELETE trigger with condition inside function [OK]