创建触发器

HGDB 中触发器必须结合触发器函数来使用,需要先用 CREATE FUNCTION 创建触发器函数,再用 CREATE TRIGGER 创建触发器。触发器函数必须声明为无参,且返回 trigger 类型,一个触发器函数可用于多个触发器。有关 CREATE FUNCTION 的用法将在下一节介绍。

CREATE TRIGGER trigger_name [BEFORE|AFTER|INSTEAD OF] event_name ON table_name
[
-- 触发器逻辑....
];

event_name 可以是在所提到的表 table_name 上的 INSERTDELETEUPDATE 数据库操作,在表名后指定 FOR EACH ROW 即为行级触发器。

下面来创建一个完整的触发器:

CREATE OR REPLACE FUNCTION public.log_booksusers_delete()
RETURNS trigger
LANGUAGE plpgsql
AS $function$
begin
insert into table_change_log(log_id, table_name, operation_type, user_name, row_data)
values (nextval('seq_table_change_log'),
'customers',
'DELETE',
USER,
'ID: ' || OLD.user_id || ', Name: ' || OLD.book_id);
end;
$function$
;

可以通过OLD或者NEW获取上一条删除的数据与下一条新增的数据

在创建一个
CREATE TRIGGER log_booksusers_delete after delete on "BOOKSUSERS"
for each row
EXECUTE FUNCTION log_booksusers_delete(); 来调用函数