b8d43c7d创建于 2022年11月30日历史提交
\c table_name_test_db;
set dolphin.lower_case_table_names TO 0;
CREATE TABLE Test_trigger_src_tbl(id1 INT, id2 INT, id3 INT);
CREATE TABLE Test_trigger_des_tbl(id1 INT, id2 INT, id3 INT);

CREATE OR REPLACE FUNCTION tri_insert_func() RETURNS TRIGGER AS
$$
DECLARE
BEGIN
        INSERT INTO Test_trigger_des_tbl VALUES(NEW.id1, NEW.id2, NEW.id3);
        RETURN NEW;
END
$$ LANGUAGE PLPGSQL;

CREATE OR REPLACE FUNCTION tri_update_func() RETURNS TRIGGER AS
$$
DECLARE
BEGIN
        UPDATE Test_trigger_des_tbl SET id3 = NEW.id3 WHERE id1=OLD.id1;
        RETURN OLD;
END
$$ LANGUAGE PLPGSQL;

CREATE OR REPLACE FUNCTION TRI_DELETE_FUNC() RETURNS TRIGGER AS
$$
DECLARE
BEGIN
        DELETE FROM Test_trigger_des_tbl WHERE id1=OLD.id1;
        RETURN OLD;
END
$$ LANGUAGE PLPGSQL;

CREATE TRIGGER insert_trigger
BEFORE INSERT ON Test_trigger_src_tbl
FOR EACH ROW
EXECUTE PROCEDURE tri_insert_func();

CREATE TRIGGER update_trigger
AFTER UPDATE ON Test_trigger_src_tbl  
FOR EACH ROW
EXECUTE PROCEDURE tri_update_func();

CREATE TRIGGER delete_trigger
BEFORE DELETE ON Test_trigger_src_tbl
FOR EACH ROW
EXECUTE PROCEDURE tri_delete_func();

INSERT INTO Test_trigger_src_tbl VALUES(100,200,300);
SELECT * FROM Test_trigger_src_tbl;
SELECT * FROM Test_trigger_des_tbl;

UPDATE Test_trigger_src_tbl SET id3=400 WHERE id1=100;
SELECT * FROM Test_trigger_src_tbl;
SELECT * FROM Test_trigger_des_tbl;

DELETE FROM Test_trigger_src_tbl WHERE id1=100;
SELECT * FROM Test_trigger_src_tbl;
SELECT * FROM Test_trigger_des_tbl;

ALTER TRIGGER delete_trigger ON Test_trigger_src_tbl RENAME TO delete_trigger_renamed;
ALTER TABLE Test_trigger_src_tbl DISABLE TRIGGER insert_trigger;
ALTER TABLE Test_trigger_src_tbl DISABLE TRIGGER ALL;

DROP TRIGGER insert_trigger ON Test_trigger_src_tbl;
DROP TRIGGER update_trigger ON Test_trigger_src_tbl;
DROP TRIGGER delete_trigger_renamed ON Test_trigger_src_tbl;