0
0
PostgreSQLquery~20 mins

Trigger for data validation in PostgreSQL - Practice Problems & Coding Challenges

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!
query_result
intermediate
2:00remaining
Output of a trigger function enforcing age validation
Consider a PostgreSQL table users with a trigger that prevents inserting rows where age is less than 18. What will happen if you run the following insert?
INSERT INTO users (id, name, age) VALUES (1, 'Alice', 16);
PostgreSQL
CREATE OR REPLACE FUNCTION check_age() RETURNS trigger AS $$
BEGIN
  IF NEW.age < 18 THEN
    RAISE EXCEPTION 'Age must be at least 18';
  END IF;
  RETURN NEW;
END;
$$ LANGUAGE plpgsql;

CREATE TRIGGER age_check BEFORE INSERT ON users
FOR EACH ROW EXECUTE FUNCTION check_age();
AThe insert fails with an error: 'Age must be at least 18'.
BThe insert is ignored silently without error.
CThe insert succeeds but age is automatically set to 18.
DThe row is inserted successfully with age 16.
Attempts:
2 left
💡 Hint
Triggers can raise exceptions to stop invalid data from being inserted.
📝 Syntax
intermediate
2:00remaining
Identify the syntax error in this trigger function
Which option contains the correct syntax for a PostgreSQL trigger function that validates a non-empty username field before insert?
PostgreSQL
CREATE OR REPLACE FUNCTION validate_username() RETURNS trigger AS $$
BEGIN
  IF NEW.username = '' THEN
    RAISE EXCEPTION 'Username cannot be empty';
  END IF;
  RETURN NEW;
END;
$$ LANGUAGE plpgsql;
ACREATE OR REPLACE FUNCTION validate_username() RETURNS trigger AS $$ BEGIN IF NEW.username = '' THEN RAISE 'Username cannot be empty'; END IF; RETURN NEW; END; $$ LANGUAGE plpgsql;
BCREATE OR REPLACE FUNCTION validate_username() RETURNS trigger AS $$ BEGIN IF NEW.username == '' THEN RAISE EXCEPTION 'Username cannot be empty'; END IF; RETURN NEW; END; $$ LANGUAGE plpgsql;
CCREATE FUNCTION validate_username() RETURNS trigger AS $$ BEGIN IF NEW.username = '' THEN RAISE EXCEPTION 'Username cannot be empty'; END IF; RETURN NEW; END; $$ LANGUAGE plpgsql;
DCREATE OR REPLACE FUNCTION validate_username() RETURNS trigger AS $$ BEGIN IF NEW.username = '' THEN RAISE EXCEPTION 'Username cannot be empty'; END IF; RETURN NEW; END; $$ LANGUAGE plpgsql;
Attempts:
2 left
💡 Hint
Check the use of 'CREATE OR REPLACE FUNCTION' and the correct comparison operator.
optimization
advanced
2:00remaining
Optimizing a trigger for multiple column validations
You want to create a trigger that validates both email and phone columns on insert or update. Which option is the most efficient way to write the trigger function?
ACreate one AFTER INSERT OR UPDATE trigger that checks email and phone and deletes the row if invalid.
BCreate one trigger function that checks both email and phone in a single BEFORE INSERT OR UPDATE trigger.
CCreate one trigger function that checks email on BEFORE INSERT and phone on BEFORE UPDATE separately.
DCreate two separate triggers: one for email validation and one for phone validation, both firing BEFORE INSERT OR UPDATE.
Attempts:
2 left
💡 Hint
Minimize the number of triggers for better performance.
🔧 Debug
advanced
2:00remaining
Debugging a trigger that does not prevent invalid data
A trigger is supposed to prevent inserting rows with salary less than 0, but invalid rows are still inserted. Which option explains the most likely cause?
PostgreSQL
CREATE OR REPLACE FUNCTION check_salary() RETURNS trigger AS $$
BEGIN
  IF NEW.salary < 0 THEN
    RAISE EXCEPTION 'Salary cannot be negative';
  END IF;
  RETURN NULL;
END;
$$ LANGUAGE plpgsql;

CREATE TRIGGER salary_check BEFORE INSERT ON employees
FOR EACH ROW EXECUTE FUNCTION check_salary();
AThe trigger function returns NULL, which skips the insert instead of raising an error.
BThe trigger is AFTER INSERT, so it cannot prevent the insert.
CThe trigger function uses RAISE EXCEPTION incorrectly and does not stop the insert.
DThe trigger is defined FOR EACH STATEMENT instead of FOR EACH ROW.
Attempts:
2 left
💡 Hint
Check what the trigger function returns to control the insert.
🧠 Conceptual
expert
2:00remaining
Understanding trigger timing and data validation
Which statement best describes why a BEFORE trigger is preferred over an AFTER trigger for data validation in PostgreSQL?
AAFTER triggers run before the data is inserted, so they can modify data before saving.
BBEFORE triggers run after the data is inserted, so they can rollback changes if invalid.
CBEFORE triggers run before the data is inserted, allowing validation and prevention of invalid data before it reaches the table.
DAFTER triggers prevent invalid data by stopping the insert before it happens.
Attempts:
2 left
💡 Hint
Think about when the data is checked relative to insertion.