您的位置:首页 > 数据库

postgresql触发器使用实例

2014-06-20 15:34 337 查看
创建测试表:

CREATE TABLE emp (

empname text NOT NULL,

salary integer

);

CREATE TABLE emp_audit(

operation text NOT NULL,

stamp timestamp NOT NULL,

userid text NOT NULL,

empname text NOT NULL,

salary integer

);

创建存储过程:

CREATE OR REPLACE FUNCTION process_emp_audit()

RETURNS TRIGGER AS

$emp_audit$

BEGIN

IF (TG_OP = 'DELETE') THEN

INSERT INTO emp_audit SELECT 'DELETE', now(), user, OLD.*;

ELSIF (TG_OP = 'UPDATE') THEN

-- save old and new values

INSERT INTO emp_audit SELECT 'OLD', now(), user, OLD.*;

INSERT INTO emp_audit SELECT 'NEW', now(), user, NEW.*;

ELSIF (TG_OP = 'INSERT') THEN

INSERT INTO emp_audit SELECT 'INSERT', now(), user, NEW.*;

ELSEIF (TG_OP = 'TRUNCATE') THEN

INSERT INTO emp_audit SELECT 'TRUNCATE', now(), user, '-', -1;

END IF;

RETURN NULL; -- result is ignored bacause this is an AFTER trigger

END;

$emp_audit$ LANGUAGE plpgsql;

创建针对insert和update每行的触发器:

CREATE TRIGGER emp_audit

AFTER INSERT OR UPDATE OR DELETE ON emp

FOR EACH ROW EXECUTE PROCEDURE process_emp_audit();

创建针对update的语句级的触发器:

CREATE TRIGGER emp_audit_truncate

AFTER TRUNCATE ON emp

FOR EACH STATEMENT EXECUTE PROCEDURE process_emp_audit();
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: