CREATE OR REPLACE FUNCTION tcg.public.FN_before_insert_TCG_MTG_Rarity() RETURNS TRIGGER AS $$ BEGIN NEW.created_on = CURRENT_TIMESTAMP; NEW.updated_last_on = CURRENT_TIMESTAMP; IF NEW.change_set_id IS NULL THEN RAISE EXCEPTION 'Change Set ID must be provided.'; END IF; RETURN NEW; END; $$ LANGUAGE plpgsql ; CREATE OR REPLACE FUNCTION tcg.public.FN_before_update_TCG_MTG_Rarity() RETURNS TRIGGER AS $$ BEGIN NEW.updated_last_on = CURRENT_TIMESTAMP; IF OLD.change_set_id IS NOT DISTINCT FROM NEW.change_set_id THEN RAISE EXCEPTION 'New Change Set ID must be provided.'; END IF; INSERT INTO tcg.public.TCG_MTG_Rarity_Audit ( rarity_id , name_field , value_prev , value_new , change_set_id ) -- Changed name SELECT NEW.rarity_id, 'name', OLD.name, NEW.name, NEW.change_set_id WHERE OLD.name IS NOT DISTINCT FROM NEW.name UNION -- Changed colour_name SELECT NEW.rarity_id, 'colour_name', OLD.colour_name, NEW.colour_name, NEW.change_set_id WHERE OLD.colour_name IS NOT DISTINCT FROM NEW.colour_name UNION -- Changed price_ratio_min SELECT NEW.rarity_id, 'price_ratio_min', CAST(OLD.price_ratio_min AS VARCHAR), CAST(NEW.price_ratio_min AS VARCHAR), NEW.change_set_id WHERE OLD.price_ratio_min IS NOT DISTINCT FROM NEW.price_ratio_min UNION -- Changed price_ratio_max SELECT NEW.rarity_id, 'price_ratio_max', CAST(OLD.price_ratio_max AS VARCHAR), CAST(NEW.price_ratio_max AS VARCHAR), NEW.change_set_id WHERE OLD.price_ratio_max IS NOT DISTINCT FROM NEW.price_ratio_max UNION -- Changed active SELECT NEW.rarity_id, 'active', OLD.active::TEXT, NEW.active::TEXT, NEW.change_set_id WHERE OLD.active IS NOT DISTINCT FROM NEW.active ; RETURN NEW; END; $$ LANGUAGE plpgsql ; CREATE TRIGGER TRI_before_insert_TCG_MTG_Rarity BEFORE INSERT ON tcg.public.TCG_MTG_Rarity FOR EACH ROW EXECUTE FUNCTION tcg.public.FN_before_insert_TCG_MTG_Rarity() ; CREATE TRIGGER TRI_before_update_TCG_MTG_Rarity BEFORE UPDATE ON tcg.public.TCG_MTG_Rarity FOR EACH ROW EXECUTE FUNCTION tcg.public.FN_before_update_TCG_MTG_Rarity() ;