標籤:var tab vol rod body volatil after pos new
觸發器的知識點:
PostgreSQL在以下情況下執行/調用觸發器:在嘗試操作之前(在檢查約束並嘗試INSERT
,UPDATE
或DELETE
之前)。或者在操作完成後(在檢查約束並且INSERT
,UPDATE
或DELETE
完成後)。或者不是操作(在視圖中INSERT
,UPDATE
或DELETE
的情況下)
對於操作修改的每一行,都會調用一個標記為FOR EACH ROWS
的觸發器。 另一方面,標記為FOR EACH STATEMENT
的觸發器只對任何給定的操作執行一次,而不管它修改多少行。
您可以為同一事件定義同一類型的多個觸發器,但條件是按名稱按字母順序觸發。
- 當與它們相關聯的表被刪除時,觸發器被自動刪除。
step1: 建立記錄日誌表, 追蹤記錄表上的所有操作
create table auditlog
(
operation varchar(100),
id int,
productname varchar(100),
catagoryid int,
subcatagoryid int,
operationdate timestamp without time zone
)
step2: 建立觸發器相關的預存程序
CREATE FUNCTION public.auditinsertfunlog()
RETURNS trigger
LANGUAGE ‘plpgsql‘
COST 100
VOLATILE NOT LEAKPROOF
ROWS 0
AS $BODY$
begin
insert into auditlog (operation,id,productname,catagoryid,subcatagoryid,operationdate)
values(‘insert‘,new.id,new."productName",new."catagoryID",new."subcatagoryID",current_timestamp);
return new;
end;
$BODY$;
ALTER FUNCTION public.auditinsertfunlog()
OWNER TO postgres;
step3: 建立觸發器
CREATE TRIGGER products_insert_trigger
AFTER INSERT ON public."Products"
FOR EACH ROW EXECUTE PROCEDURE public.auditinsertfunlog();
PostgreSQL 建立觸發器 Trigger