Triggers
Last updated
CREATE FUNCTION trigger_function( )
RETURNS TRIGGER LANGUAGE PLPGSQL
AS $$
BEGIN
-- TRIGGER LOGIC
END;
$$CREATE TRIGGER trigger_name {BEFORE|AFTER} {EVENT}
ON table_name
[FOR [EACH] {ROW | STATEMENT}]
EXECUTE PROCEDURE trigger_function
-- FOR EACH [ROW|STATEMENT]CREATE TABLE players (
player_id SERIAL PRIMARY KEY,
name VARCHAR(100)
);
CREATE TABLE player_audits (
player_audit_id SERIAL PRIMARY KEY,
player_id INT NOT NULL,
name VARCHAR(100) NOT NULL,
new_name VARCHAR(100) NOT NULL,
edit_date TIMESTAMP NOT NULL
);-- Function executed by TRIGGER
CREATE OR REPLACE FUNCTION fn_players_name_changes_log()
RETURNS TRIGGER
LANGUAGE PLPGSQL
AS
$$
BEGIN
IF NEW.name <> OLD.name THEN
INSERT INTO player_audits
( player_id, name, new_name, edit_date )
values ( OLD.player_id, OLD.name, NEW.name ,NOW() );
END IF;
RETURN NEW;
END;
$$
-- TRIGGER Definition
CREATE TRIGGER trg_players_name_changes
BEFORE UPDATE
ON players
FOR EACH ROW
EXECUTE PROCEDURE fn_players_name_changes_log();INSERT INTO players (name) VALUES ('UDAY'),('YADAV');
SELECT * FROM players;
select * from player_audits;
UPDATE players
SET name = 'UDAY 2'
WHERE player_id = 2;-- create table for example
CREATE TABLE t_temperature_log (
id_temperature SERIAL PRIMARY KEY,
add_date TIMESTAMP,
temperature NUMERIC
);
-- create function for trigger to execute
CREATE OR REPLACE FUNCTION fn_temperature_value_check_at_insert()
RETURNS TRIGGER
LANGUAGE PLPGSQL
AS
$$
BEGIN
IF NEW.temperature < -30 then
NEW.temperature = 0;
END IF;
RETURN NEW;
END;
$$
-- creating trigger
CREATE TRIGGER trg_temperature_value_check_at_insert
BEFORE INSERT
ON t_temperature_log
FOR EACH ROW
EXECUTE PROCEDURE fn_temperature_value_check_at_insert();
-- Queries
INSERT INTO t_temperature_log ( add_date, temperature )
values ( '2020-10-01' , 10 );
select * from t_temperature_log;
INSERT INTO t_temperature_log ( add_date, temperature )
values ( '2020-10-01' , -33 );
select * from t_temperature_log;