当前位置:网站首页>PG basics -- Logical Structure Management (trigger)
PG basics -- Logical Structure Management (trigger)
2022-07-01 12:53:00 【51CTO】
Create trigger
1) First, create an execution function for the trigger , The return type of this function is trigger type
2) Build a trigger
postgres
=#
create function student_delete_trigger
(
)
postgres
-# returns trigger
as $$
postgres$#
begin
postgres$#
delete
from score
where student_no
=OLD
.student_no
;
postgres$# return OLD
;
postgres$# end
;
postgres$# $$
postgres
-# language plpgsql
;
CREATE FUNCTION
postgres
=#
postgres
=#
create trigger delete_student_trigger
postgres
-# after
delete
on student
postgres
-# for each row execute procedure student_delete_trigger
(
)
;
CREATE TRIGGER
postgres
=#
insert
into student
values
(
1
,
' Zhang San '
,
14
)
;
insert
into student
values
(
2
,
' Li Si '
,
14
)
;
INSERT
0
1
postgres
=#
insert
into student
values
(
2
,
' Li Si '
,
14
)
;
INSERT
0
1
postgres
=#
insert
into student
values
(
3
,
' The king 2 '
,
14
)
;
INSERT
0
1
postgres
=#
postgres
=#
insert
into score
values
(
1
,
85
,
75
,
date '2022-06-29'
)
;
INSERT
0
1
postgres
=#
insert
into score
values
(
1
,
80
,
73
,
date '2022-01-29'
)
;
INSERT
0
1
postgres
=#
insert
into score
values
(
2
,
87
,
75
,
date '2022-03-29'
)
;
INSERT
0
1
postgres
=#
insert
into score
values
(
3
,
75
,
75
,
date '2022-06-29'
)
;
INSERT
0
1
postgres
=#
insert
into score
values
(
3
,
55
,
75
,
date '2022-04-29'
)
;
INSERT
0
1
postgres
=#
delete
from student
where student_no
=
3
;
DELETE
1
postgres
=#
select
*
from score
;
student_no
| chinese_score
| math_score
| test_date
------------+---------------+------------+------------
1
|
85
|
75
|
2022
-
06
-
29
1
|
80
|
73
|
2022
-
01
-
29
2
|
87
|
75
|
2022
-
03
-
29
(
3 rows
)
- 1.
- 2.
- 3.
- 4.
- 5.
- 6.
- 7.
- 8.
- 9.
- 10.
- 11.
- 12.
- 13.
- 14.
- 15.
- 16.
- 17.
- 18.
- 19.
- 20.
- 21.
- 22.
- 23.
- 24.
- 25.
- 26.
- 27.
- 28.
- 29.
- 30.
- 31.
- 32.
- 33.
- 34.
- 35.
- 36.
- 37.
- 38.
- 39.
- 40.
- 41.
Statement level triggers
Statement level triggers refer to the execution of each sql Statement is executed only once .
create
table log_student
(
update_time
timestamp
,
db_user
varchar
(
40
)
,
opr_type
varchar
(
6
)
)
create
or replace function log_student_trigger
(
)
returns trigger
as $$
begin
insert
into log_student
values
(now
(
)
,user
,TG_OP
)
;
return
null
;
end
;
$$
language
"plpgsql"
;
TG_OP Is a special variable in the trigger function , representative DML Operation type
create trigger log_student_trigger
after
insert
or
delete
or
update
on student
for statement execute procedure log_student_trigger
(
)
;
- 1.
- 2.
- 3.
- 4.
- 5.
- 6.
- 7.
- 8.
- 9.
- 10.
- 11.
- 12.
- 13.
- 14.
- 15.
- 16.
- 17.
- 18.
- 19.
- 20.
Although deleted 2 Bar record , But the execution is a statement , So in log_student Only one operation is recorded in .
Line level triggers
Row level triggers execute each row SQL Statements are executed once
create trigger log_student_trigger2
after
insert
or
delete
or
update
on student
for ROW EXECUTE PROCEDURE log_student_trigger
(
)
;
postgres
=#
insert
into student
values
(
1
,
' Zhang San '
,
14
)
,
(
2
,
' Li Si '
,
30
)
;
INSERT
0
2
postgres
=#
select
*
from log_student
;
update_time
| db_user
| opr_type
----------------------------+----------+----------
2022
-
06
-
30
10
:
42
:
58.834223
| postgres
|
INSERT
2022
-
06
-
30
10
:
42
:
58.834223
| postgres
|
INSERT
(
2 rows
)
- 1.
- 2.
- 3.
- 4.
- 5.
- 6.
- 7.
- 8.
- 9.
- 10.
- 11.
- 12.
- 13.
- 14.
You can see a line sql Execution insert 2 Row data , The log table records 2 Bar record
BEFORE trigger
Statement level BEFOR Triggers are triggered before the statement starts doing anything
Line level BEFORE Triggers are triggered before the operation on a specific row .
AFTER trigger
Statement level AFTER Triggers are triggered at the end of the statement
Line level AFTER Triggers are triggered at the end of the statement , It will be at any statement level AFTER Trigger before trigger .
Delete trigger
if exists If the trigger does not exist , Send out a notice Not a mistake
cascade Cascade delete objects that depend on this trigger
restrict If there are dependent objects, they refuse to delete
Be careful : When you delete a trigger , The function of the trigger will not be deleted , however , When deleting a table , The trigger on the table will be deleted .
Trigger function has return value , Statement level triggers should always return NULL, That is, the required display is written in the trigger function return null, Otherwise, the report will be wrong .
边栏推荐
- Digital signal processing -- Design of linear phase (Ⅱ, Ⅳ) FIR filter (2)
- Topic 1004: the story of cows (recursion)
- Detailed explanation of OSPF LSA of routing Foundation
- oracle cdc 数据传输时,clob类型字段,在update时值会丢失,update前有值,但
- Localtime can't re-enter. It's a pit
- 快速整明白Redis中的压缩列表到底是个啥
- 华为HMS Core携手超图为三维GIS注入新动能
- 有没有大佬 遇到过flink监控postgresql数据库, 检查点无法使用的问题
- Accept different views with an open mind
- Ustime wrote a bug
猜你喜欢

Redis exploration: cache breakdown, cache avalanche, cache penetration

Detailed explanation of OSPF LSA of routing Foundation

Wang Xing's infinite game ushers in the "ultimate" battle

The popular major I chose became "Tiankeng" four years later

Jenkins+webhooks-多分支参数化构建-
![Idea of [developing killer]](/img/74/f4a18afd2b86373996e4ca62b50f88.png)
Idea of [developing killer]

nexus搭建npm依赖私库

基于.NetCore开发博客项目 StarBlog - (13) 加入友情链接功能

项目部署,一点也不难!

Mobile note application
随机推荐
阿霍的三个阶段
Development trend and market demand analysis report of China's high purity copper industry Ⓕ 2022 ~ 2028
Tencent security released the white paper on BOT Management | interpreting BOT attacks and exploring ways to protect
Class initialization and instantiation
ROS2 Foxy depthai_ros教程
Logstash error: cannot reload pipeline, because the existing pipeline is not reloadable
VM虚拟机配置动态ip和静态ip访问
Fiori 应用通过 Adaptation Project 的增强方式分享
Tencent Li Wei: deeply cultivate "regulatory technology" to escort the steady and long-term development of the digital economy
Eurake partition understanding
redis探索之缓存一致性
Redis exploration: cache breakdown, cache avalanche, cache penetration
The future of game guild in decentralized games
类的初始化与实例化
科学创业三问:关于时机、痛点与重要决策
路由基础之OSPF LSA详细讲解
leetcode:241. Design priority for operation expression [DFS + Eval]
mysql统计账单信息(下):数据导入及查询
79. Word search [DFS + backtracking visit + traversal starting point]
基因检测,如何帮助患者对抗疾病?