Introduction
A BEFORE trigger lets you run some checks or changes before data is saved in the database. It helps keep data clean and correct.
Jump into concepts and practice - no test required
CREATE TRIGGER trigger_name BEFORE INSERT OR UPDATE ON table_name FOR EACH ROW EXECUTE FUNCTION function_name();
CREATE TRIGGER check_age BEFORE INSERT ON users FOR EACH ROW EXECUTE FUNCTION check_age_function();
CREATE TRIGGER update_timestamp BEFORE UPDATE ON orders FOR EACH ROW EXECUTE FUNCTION update_timestamp_function();
CREATE TABLE users ( id SERIAL PRIMARY KEY, name TEXT, age INT ); CREATE OR REPLACE FUNCTION check_age_function() RETURNS TRIGGER AS $$ BEGIN IF NEW.age < 18 THEN RAISE EXCEPTION 'Age must be 18 or older'; END IF; RETURN NEW; END; $$ LANGUAGE plpgsql; CREATE TRIGGER check_age BEFORE INSERT ON users FOR EACH ROW EXECUTE FUNCTION check_age_function(); -- Try to insert a user with age 16 INSERT INTO users (name, age) VALUES ('Alice', 16);
BEFORE trigger in PostgreSQL?users?status to 'active':CREATE FUNCTION set_status() RETURNS trigger AS $$ BEGIN NEW.status := 'active'; RETURN NEW; END; $$ LANGUAGE plpgsql; CREATE TRIGGER trg_set_status BEFORE INSERT ON accounts FOR EACH ROW EXECUTE FUNCTION set_status(); INSERT INTO accounts (id, status) VALUES (1, 'pending'); SELECT status FROM accounts WHERE id = 1;
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;age = 16?products table that prevents the price from being set below zero. Which trigger function code correctly enforces this rule?BEGIN
IF NEW.price < 0 THEN
NEW.price := 0;
END IF;
RETURN NEW;
END; silently changes price to 0 (may hide errors), C checks OLD.price (wrong), D deletes row (not appropriate).