当前位置:   article > 正文

postgresql触发器实例_gp 触发器案例

gp 触发器案例

 

可能好多猿有疑惑,为什么要使用触发器,postgresql不是可以设置字段默认值吗。

首先先了解清楚字段默认值和触发器功能的区别:

1. 字段默认值:

ALTER TABLE public.so_cars_roadplans ALTER COLUMN id SET DEFAULT nextval('so_cars_roadplans_id_seq'::regclass);

好多web项目采用java SSH架构,hibernate最明显的就是实体映射,实体与表结构对应。假如我们默认值字段实体映射时,表单填值了,我们字段默认就不会生效,这个坑我当时遇到,后期就采用触发器方式解决。

2. 触发器:

触发器与字段默认模式最大的区别,就是在于时间顺序。

字段默认可以实时更新,举个例子,插入一条新纪录,实时就能根据默认值填充。

触发器执行有before和after两种:

before表示在insert、update或者delete记录之前执行,after表示在记录之后执行。

先看看postgresql触发器代码格式:

  1. CREATE TRIGGER trigger_name [BEFORE|AFTER|INSTEAD OF] event_name
  2. ON table_name
  3. [
  4. -- Trigger logic goes here....
  5. ];
  6. CREATE TRIGGER trigger_name AFTER INSERT ON column_name
  7. ON table_name
  8. [
  9. -- Trigger logic goes here....
  10. ];

下面针对一个触发器例子来讲解:

需求是我们要在so_cars_roadplans表中插入一条数据,同时,保证字段correlationid默认赋值uuid编码

a. 我们先使用insert语句执行新增插入数据;

b. 插入完成触发update语句,针对插入的记录,将uuid编码赋值给correlationid字段。

(1)首先创建一个名为update_roadplans_funcs的函数/过程

我们创建一个update触发器,用于修改数据

  1. -- Function: public.update_roadplans_funcs()
  2. -- DROP FUNCTION public.update_roadplans_funcs();
  3. CREATE OR REPLACE FUNCTION public.update_roadplans_funcs()
  4. RETURNS trigger AS
  5. $BODY$
  6. BEGIN
  7. UPDATE so_cars_roadplans SET correlationid = uuid_generate_v1() where id = NEW.ID;
  8. RETURN NEW;
  9. END;
  10. $BODY$
  11. LANGUAGE plpgsql VOLATILE
  12. COST 100;
  13. ALTER FUNCTION public.update_roadplans_funcs()
  14. OWNER TO postgres;

这里面有个NEW对象,表示insert记录record,注意where条件,不然就全部记录修改了。

(2)之后创建触发器TRIGGER,表示在insert之后触发update_roadplans_funcs函数/存储过程

  1. -- Trigger: update_roadplans_trigger on public.so_cars_roadplans
  2. -- DROP TRIGGER update_roadplans_trigger ON public.so_cars_roadplans;
  3. CREATE TRIGGER update_roadplans_trigger
  4. AFTER INSERT
  5. ON public.so_cars_roadplans
  6. FOR EACH ROW
  7. EXECUTE PROCEDURE public.update_roadplans_funcs();

(3)最后我们是用insert语句插入记录验证触发器是否生效

INSERT INTO "public"."so_cars_roadplans" ("id", "type") VALUES (351,'3');

我们看到correlationi字段uuid编码已经生成

我们的触发器功能就完全实现了,希望能帮到大家。

最后贴一些大神的触发器博文链接,供大家膜拜

https://www.yiibai.com/postgresql/postgresql-trigger.html

https://blog.csdn.net/neo_liu0000/article/details/6255623

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/煮酒与君饮/article/detail/770193
推荐阅读
相关标签
  

闽ICP备14008679号