当前位置:网站首页>GBase 8c触发器(二)
GBase 8c触发器(二)
2022-07-03 02:18:00 【大壮十二】
在继承或分区层次结构中定位父表的语句不会导致受影响的子表的语句级触发器被触发; 只有父表的语句级触发器被触发。但是,任何受影响的子表的行级触发器都将被触发。
如果一个INSERT包含ON CONFLICT DO UPDATE子句并且引用了EXCLUDED列,有可能行级BEFORE INSERT触发器和行级BEFORE UPDATE触发器的效果可能会以一种对于 被更新行最终状态透明的方式被应用。不过,对于要执行的两种集合的行级BEFORE触发器都不需要有EXCLUDED列引用。当同时有行级BEFORE INSERT和BEFORE UPDATE触发器修改被插入/ 更新的行时(即使修改或多或少都具有同等效力,但如果它们也不是幂等的,这可能会有问题), 应该考虑可能出现的意料之外的结果。注意在指定了ON CONFLICT DO UPDATE时,不管有没有行被UPDATE影响(并且不管是否采用了其他UPDATE路径),语句级UPDATE都将被执行。一个带有ON CONFLICT DO UPDATE子句的INSERT将首先执行语句级BEFOREINSERT, 然后执行语句级BEFOREUPDATE触发器, 接着是语句级AFTERUPDATE触发器, 最后是语句级AFTERINSERT触发器。
被语句级触发器调用的触发器函数应该总是返回NULL。根据行级触发器的选择,被其调用的触发器函数可以返回一个表行(类型HeapTuple的一个值)给执行器。在一个操作前触发的行级触发器有下列选择:
- 它可以返回NULL来跳过对当前行的操作。这指示执行器不要执行调用触发器的行级操作(对一个特定表行的插入、修改或删除)。
- 仅对行级INSERT和UPDATE触发器来说,被返回的行称为将要被插入的行或者替代将被更新的行。这允许触发器函数修改将要被插入或更新的行。
一个无意导致任何这些行为的行级BEFORE触发器必须小心地它的结果,使之和被传入的行一样(即,INSERT和UPDATE触发器的NEW行,DELETE触发器的OLD行)。
一个行级INSTEAD OF触发器可以返回NULL来指示它没有修改任何来自于视图底层基表的数据,也可以返回被传入的视图行(INSERT和UPDATE操作的NEW行,或者DELETE操作的OLD行)。一个非空返回值被用于标志触发器在视图中执行了必须的数据修改。这将会导致被命令修改的行计数被增加。对于INSERT和UPDATE操作,触发器可能会在返回NEW行之前对其进行修改。这将会改变INSERT RETURNING或UPDATE RETURNING返回的数据,并在视图无法正确地显示提供给它的相同数据时有用。
对于在一个操作之后触发的行级触发器,返回值会被忽略,因此它们可以返回NULL。
如果为同一个关系上的同一事件定义了超过一个触发器,它们将按照其名称的字母表顺序被触发。在BEFORE和INSTEAD OF触发器的情况下,每一个触发器返回的可能被修改的行将成为下一个触发器的输入。如果任何一个BEFORE或INSTEAD OF触发器返回NULL,该操作将在该行上被禁用并且对于该行不会触发后续的触发器。
边栏推荐
- Hard core observation 547 large neural network may be beginning to become aware?
- Deep learning notes (constantly updating...)
- [Flutter] dart: class;abstract class;factory;类、抽象类、工厂构造函数
- es6 filter() 数组过滤方法总结
- Visualisation de l'ensemble de données au format yolov5 (fichier labelme json)
- Awk from getting started to getting into the ground (3) the built-in functions printf and print of awk realize formatted printing
- 详细些介绍如何通过MQTT协议和华为云物联网进行通信
- Qt之QComboBox添加QCheckBox(下拉列表框插入复选框,含源码+注释)
- 【CodeForces】CF1338A - Powered Addition【二进制】
- elastic stack
猜你喜欢
Ni visa fails after LabVIEW installs the third-party visa software
Create + register sub apps_ Define routes, global routes and sub routes
[Flutter] dart: class;abstract class;factory;类、抽象类、工厂构造函数
[shutter] pull the navigation bar sideways (drawer component | pageview component)
How to deal with cache hot key in redis
Servlet中数据传到JSP页面使用el表达式${}无法显示问题
y54.第三章 Kubernetes从入门到精通 -- ingress(二七)
微服务组件Sentinel (Hystrix)详细分析
Producer consumer model based on thread pool (including blocking queue)
Use go language to realize try{}catch{}finally
随机推荐
DML Foundation
Use go language to realize try{}catch{}finally
可視化yolov5格式數據集(labelme json文件)
GBase 8c 函数/存储过程参数(二)
[codeforces] cf1338a - Powered addition [binary]
Socket programming
Return a tree structure data
Stm32f407 ------- IIC communication protocol
Awk from introduction to earth (0) overview of awk
苏世民:25条工作和生活原则
What are the key points often asked in the redis interview
Leetcode 183 Customers who never order (2022.07.02)
Solution for processing overtime orders (Overtime unpaid)
【ROS进阶篇】第六讲 ROS中的录制与回放(rosbag)
Qt之QComboBox添加QCheckBox(下拉列表框插入复选框,含源码+注释)
easyPOI
机器学习笔记(持续更新中。。。)
微信小程序開發工具 POST net::ERR_PROXY_CONNECTION_FAILED 代理問題
《上市风云》荐书——唯勇气最可贵
Method of removing webpage scroll bar and inner and outer margins