runoobdb=# CREATE TABLE AUDIT(
EMP_ID INT NOT NULL,
ENTRY_DATE TEXT NOT NULL
在这里,ID 是 AUDIT 记录的 ID,EMP_ID 是来自 COMPANY 表的 ID,DATE 将保持 COMPANY 中记录被创建时的时间戳。所以,现在让我们在 COMPANY 表上创建一个触发器,如下所示:
runoobdb=# CREATE TRIGGER example_trigger AFTER INSERT ON COMPANY FOR EACH ROW EXECUTE PROCEDURE auditlogfunc();
auditlogfunc() 是 PostgreSQL 一个程序,其定义如下:
CREATE OR REPLACE FUNCTION auditlogfunc() RETURNS TRIGGER AS $example_table$
BEGIN
INSERT INTO AUDIT(EMP_ID, ENTRY_DATE) VALUES (new.ID, current_timestamp);
RETURN NEW;
$example_table$ LANGUAGE plpgsql;
现在,我们开始往 COMPANY 表中插入数据:
runoobdb=# INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) VALUES (1, 'Paul', 32, 'California', 20000.00 );
这时,COMPANY 表中插入了一条记录:
同时, AUDIT 表中也插入了一条记录,因为我们在插入 COMPANY 表时创建了一个触发器。相似的,我们也可以根据需求在更新和删除时创建触发器:
emp_id | entry_date
--------+-------------------------------
1 | 2013-05-05 15:49:59.968+05:30
(1 row)
列出触发器
你可以把从 pg_trigger 表中把当前数据库所有触发器列举出来:
runoobdb=# SELECT * FROM pg_trigger;
如果,你想列举出特定表的触发器,语法如下:
runoobdb=# SELECT tgname FROM pg_trigger, pg_class WHERE tgrelid=pg_class.oid AND relname='company';
得到结果如下:
tgname
-----------------
example_trigger
(1 row)
删除触发器
删除触发器基础语法如下:
drop trigger ${trigger_name} on ${table_of_trigger_dependent};
删除本文上表 company 上的触发器 example_trigger 的指令为:
drop trigger example_trigger on company;