这一节描述了事件触发器函数接口的低层细节。只有在用 C 编写事件 触发器函数时才需要用到这里的信息。如果使用更高层的语言,那么 这些细节已经被处理好了。在大部分情况下都应该优先考虑使用过程 语言来编写你的事件触发器。每一种过程语言的文档都解释了如何用 它编写事件触发器。
事件触发器函数必须使用“版本 1”的函数管理器接口。
当一个函数被事件触发器管理器调用时,向它传递的并不是普通参数, 而是一个指向EventTriggerData
结构的 “context”指针。C 函数可以通过执行以下宏来检查它是否 被事件触发器管理器调用:
CALLED_AS_EVENT_TRIGGER(fcinfo)
这个宏会被扩展为:
((fcinfo)->context != NULL && IsA((fcinfo)->context, EventTriggerData))
如果这个宏返回真,那么就可以安全地把 fcinfo->context
造型为类型EventTriggerData
*
并且使用所指向的EventTriggerData
结构。 函数不能修改 EventTriggerData
结构以及它指向的任何内容。
struct EventTriggerData
在 commands/event_trigger.h
中定义:
typedef struct EventTriggerData
{
NodeTag type;
const char *event;
Node *parsetree;
CommandTag tag;
} EventTriggerData;
其中的成员定义如下:
type
总是T_EventTriggerData
。
event
描述要为其调用这个函数的事件,可以是 "ddl_command_start"
、"ddl_command_end"
、 "sql_drop"
、"table_rewrite"
之一。 这些事件的含义请见第 39.1 节。
parsetree
该命令的解析树的指针。其细节可以参考 PostgreSQL 的源代码。 解析树结构可能会在未经通知的情况下改变。
tag
与事件触发器的事件相关联的命令标签,例如 "CREATE FUNCTION"
。
一个事件触发器函数必须返回一个NULL
指针( 不是一个 SQL 空值,也就是不要把 isNull
设置为真)。
从第43.8节中介绍的数据库访问导致的错误中恢复可能导致一种不可取的情况,其中一些操作在它们中的一个失败前成功完成,并且在从...
Image alt 属性 Image 对象定义和用法alt 属性可设置或者返回图片的 alt 属性值。alt 属性指定图像不能正常显示(网速慢、图片链...
Style paddingRight 属性 Style 对象定义和用法paddingRight 属性设置或返回元素的右内边距。语法设置 paddingRight 属性:Objec...
Style outlineStyle 属性 Style 对象定义和用法outlineStyle 属性设置或返回元素周围的轮廓的样式。语法设置 outlineStyle 属性...
Style top 属性 Style 对象定义和用法top 属性设置或返回定位元素的顶部位置。该属性规定了元素的顶部位置,包括:内边距、滚动...