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 a trigger function in PostgreSQL?
A trigger function is a special function that automatically runs when a specified event happens on a table, like inserting, updating, or deleting data.
Click to reveal answer
beginner
Which language is commonly used to write trigger functions in PostgreSQL?
PL/pgSQL is the most common language used to write trigger functions in PostgreSQL because it allows procedural logic inside the database.
Click to reveal answer
beginner
What keyword is used to create a trigger function in PostgreSQL?
The keyword used is CREATE FUNCTION, followed by the function name and the trigger return type.
Click to reveal answer
intermediate
What must a trigger function return in PostgreSQL?
A trigger function must return a special type called TRIGGER to work properly with triggers.
Click to reveal answer
intermediate
How do you access the row data inside a trigger function during an INSERT event?
You use the special variable NEW to access the new row data being inserted.
Click to reveal answer
Which statement correctly starts a trigger function in PostgreSQL?
ACREATE FUNCTION my_trigger() RETURNS TRIGGER AS $$ BEGIN ... END; $$ LANGUAGE plpgsql;
BCREATE TRIGGER my_trigger() BEGIN ... END;
CCREATE PROCEDURE my_trigger() RETURNS VOID AS $$ ... $$;
DCREATE FUNCTION my_trigger() RETURNS VOID AS $$ ... $$;
✗ Incorrect
Trigger functions must be created with CREATE FUNCTION and must return type TRIGGER.
What does the NEW keyword represent inside a trigger function?
AThe old row before update or delete
BThe new row being inserted or updated
CThe table name
DThe trigger event type
✗ Incorrect
NEW holds the new row data for INSERT or UPDATE events.
Which event can a trigger function respond to?
AINSERT
BUPDATE
CDELETE
DAll of the above
✗ Incorrect
Triggers can be set to fire on INSERT, UPDATE, or DELETE events.
What language must be specified when creating a trigger function in PostgreSQL?
ASQL
BPython
Cplpgsql
DJavaScript
✗ Incorrect
plpgsql is the procedural language used for writing trigger functions.
What is the return type of a trigger function?
ATRIGGER
BINTEGER
CVOID
DBOOLEAN
✗ Incorrect
Trigger functions must return type TRIGGER.
Explain how to create a basic trigger function in PostgreSQL that logs inserts on a table.
Think about the function structure and what it should return.
You got /6 concepts.
Describe the role of trigger functions and how they interact with database events.
Consider what happens when data changes in a table.
You got /5 concepts.
Practice
(1/5)
1. What is the correct return type for a trigger function in PostgreSQL?
easy
A. void
B. trigger
C. integer
D. boolean
Solution
Step 1: Understand trigger function requirements
Trigger functions must return a special type that PostgreSQL recognizes for triggers.
Step 2: Identify the correct return type
The return type for trigger functions is always trigger, not standard types like void or integer.
Final Answer:
trigger -> Option B
Quick Check:
Trigger functions return type = trigger [OK]
Hint: Trigger functions always return type 'trigger' [OK]
Common Mistakes:
Using void or integer as return type
Forgetting to specify return type
Confusing trigger function with normal function
2. Which of the following is the correct way to start a trigger function in PostgreSQL?
easy
A. CREATE FUNCTION my_trigger() RETURNS trigger AS $$ BEGIN RETURN NEW; END; $$ LANGUAGE plpgsql;
B. CREATE FUNCTION my_trigger() RETURNS boolean AS $$ BEGIN RETURN TRUE; END; $$ LANGUAGE plpgsql;
C. CREATE TRIGGER my_trigger() RETURNS trigger AS $$ BEGIN RETURN OLD; END; $$ LANGUAGE plpgsql;
D. CREATE FUNCTION my_trigger() RETURNS void AS $$ BEGIN END; $$ LANGUAGE plpgsql;
Solution
Step 1: Check syntax for trigger function creation
Trigger functions must be created with CREATE FUNCTION, return type trigger, and use plpgsql language.
Step 2: Identify correct function body and return statement
Trigger functions must return NEW or OLD row, so RETURN NEW; is correct here.
Final Answer:
CREATE FUNCTION my_trigger() RETURNS trigger AS $$ BEGIN RETURN NEW; END; $$ LANGUAGE plpgsql; -> Option A
Quick Check:
Trigger function syntax = CREATE FUNCTION my_trigger() RETURNS trigger AS $$ BEGIN RETURN NEW; END; $$ LANGUAGE plpgsql; [OK]
Hint: Trigger functions use RETURNS trigger and RETURN NEW or OLD [OK]
Common Mistakes:
Using RETURNS void instead of trigger
Using CREATE TRIGGER instead of CREATE FUNCTION
Returning boolean or void instead of NEW or OLD
3. Given this trigger function, what will be the result when a new row is inserted?
CREATE FUNCTION check_age() RETURNS trigger AS $$
BEGIN
IF NEW.age < 18 THEN
RAISE EXCEPTION 'Age must be 18 or older';
END IF;
RETURN NEW;
END;
$$ LANGUAGE plpgsql;
medium
A. The row is inserted regardless of age
B. The function returns NULL causing an error
C. The row is always rejected
D. The row is inserted only if age is 18 or older
Solution
Step 1: Analyze the condition in the trigger function
The function checks if NEW.age < 18 and raises an exception if true.
Step 2: Understand effect of exception and return
If age is less than 18, insertion stops with error. Otherwise, RETURN NEW; allows insertion.
Final Answer:
The row is inserted only if age is 18 or older -> Option D
Quick Check:
Exception blocks underage inserts = The row is inserted only if age is 18 or older [OK]
Hint: Exception stops insert; RETURN NEW allows it [OK]
Common Mistakes:
Thinking all rows insert regardless
Assuming RETURN NEW inserts row without checks
Confusing RAISE EXCEPTION with warnings
4. Identify the error in this trigger function code:
CREATE FUNCTION update_timestamp() RETURNS trigger AS $$
BEGIN
NEW.updated_at = NOW();
RETURN NEW
END;
$$ LANGUAGE plpgsql;
medium
A. Cannot assign to NEW in trigger functions
B. Incorrect return type, should be void
C. Missing semicolon after RETURN NEW
D. Missing BEGIN keyword
Solution
Step 1: Check syntax for statements inside function
Each statement must end with a semicolon in PL/pgSQL.
Step 2: Identify missing semicolon
The line RETURN NEW lacks a semicolon at the end, causing syntax error.
Final Answer:
Missing semicolon after RETURN NEW -> Option C
Quick Check:
PL/pgSQL statements end with semicolon [OK]
Hint: Check semicolons after each statement [OK]
Common Mistakes:
Forgetting semicolon after RETURN NEW
Thinking NEW cannot be assigned
Confusing return type with void
5. You want to create a trigger function that automatically sets a column last_modified to the current timestamp whenever a row is updated. Which of the following trigger function definitions correctly achieves this?
hard
A. CREATE FUNCTION set_last_modified() RETURNS trigger AS $$ BEGIN NEW.last_modified := NOW(); RETURN NEW; END; $$ LANGUAGE plpgsql;
B. CREATE FUNCTION set_last_modified() RETURNS trigger AS $$ BEGIN OLD.last_modified := NOW(); RETURN OLD; END; $$ LANGUAGE plpgsql;
C. CREATE FUNCTION set_last_modified() RETURNS void AS $$ BEGIN NEW.last_modified := NOW(); END; $$ LANGUAGE plpgsql;
D. CREATE FUNCTION set_last_modified() RETURNS trigger AS $$ BEGIN NEW.last_modified = NOW(); RETURN NEW; END; $$ LANGUAGE plpgsql;
Solution
Step 1: Identify correct assignment operator in PL/pgSQL
PL/pgSQL uses := for assignment, not =.
Step 2: Check return type and returned row
Trigger functions must return type trigger and return NEW for BEFORE UPDATE triggers.
Step 3: Evaluate each option
CREATE FUNCTION set_last_modified() RETURNS trigger AS $$ BEGIN NEW.last_modified := NOW(); RETURN NEW; END; $$ LANGUAGE plpgsql; uses correct assignment :=, returns NEW, and has correct return type. CREATE FUNCTION set_last_modified() RETURNS trigger AS $$ BEGIN NEW.last_modified = NOW(); RETURN NEW; END; $$ LANGUAGE plpgsql; uses = which is invalid for assignment. CREATE FUNCTION set_last_modified() RETURNS trigger AS $$ BEGIN OLD.last_modified := NOW(); RETURN OLD; END; $$ LANGUAGE plpgsql; assigns to OLD which is read-only. CREATE FUNCTION set_last_modified() RETURNS void AS $$ BEGIN NEW.last_modified := NOW(); END; $$ LANGUAGE plpgsql; returns void which is invalid.
Final Answer:
CREATE FUNCTION set_last_modified() RETURNS trigger AS $$ BEGIN NEW.last_modified := NOW(); RETURN NEW; END; $$ LANGUAGE plpgsql; -> Option A
Quick Check:
Use := for assignment and return NEW [OK]
Hint: Use := for assignment and return NEW in trigger [OK]