# 9.29.事件触发函数
PostgreSQL提供了这些帮助函数来从事件触发器中检索信息。
有关事件触发器的更多信息,请参阅第40章.
# 9.29.1.在命令端捕获更改
pg_event_trigger_ddl_commands () → setof record
pg_事件_触发器_ddl_命令
返回每个用户操作执行的DDL命令列表,当在附加到ddl_命令_结束
事件触发器。如果在任何其他上下文中调用,则会引发错误。pg_事件_触发器_ddl_命令
为执行的每个基本命令返回一行;某些单SQL语句的命令可能返回多行。此函数返回以下列:
名称 | 类型 | 描述 |
---|---|---|
识别符 | 老年人 | 对象所属目录的OID |
对象 | 老年人 | 对象本身的OID |
奥布苏比德 | 整数 | 子对象ID(例如,列的属性号) |
命令标签 | 文本 | 命令标签 |
对象类型 | 文本 | 对象的类型 |
模式名称 | 文本 | 对象所属架构的名称(如果有);否则无效的 .不引用。 |
对象标识 | 文本 | 对象标识的文本呈现,符合架构要求。如有必要,将引用标识中包含的每个标识符。 |
in_扩展 | 布尔值 | 如果该命令是扩展脚本的一部分,则为True |
命令 | pg_ddl_命令 | 命令的完整表示形式,内部格式。这不能直接输出,但可以传递给其他函数,以获取有关该命令的不同信息。 |
# 9.29.2.处理DDL命令丢弃的对象
pg_event_trigger_dropped_objects () → setof record
pg_事件_触发器_掉落的_对象
返回命令在其中删除的所有对象的列表sql_drop
这就是所谓的事件。如果在任何其他上下文中调用,则会引发错误。此函数返回以下列:
名称 | 类型 | 描述 |
---|---|---|
识别符 | 老年人 | 对象所属目录的OID |
对象 | 老年人 | 对象本身的OID |
奥布苏比德 | 整数 | 子对象ID(例如,列的属性号) |
起初的 | 布尔值 | 如果这是删除的根对象之一,则为True |
典型的 | 布尔值 | 如果指向此对象的依赖关系图中存在正常的依赖关系,则为True |
你是临时的吗 | 布尔值 | 如果这是临时对象,则为True |
对象类型 | 文本 | 对象的类型 |
模式名称 | 文本 | 对象所属架构的名称(如果有);否则无效的 .不引用。 |
对象名称 | 文本 | 如果模式和名称的组合可用作对象的唯一标识符,则为对象的名称;否则无效的 .不使用引号,且名称永远不会限定为架构。 |
对象标识 | 文本 | 对象标识的文本呈现,符合架构要求。如有必要,将引用标识中包含的每个标识符。 |
地址和姓名 | 文本[] | 一个数组对象类型 和地址 ,可供pg_获取_对象_地址 函数在包含同名对象的远程服务器中重新创建对象地址。 |
地址 | 文本[] | 补充地址和姓名 |
这个pg_事件_触发器_掉落的_对象
函数可用于以下事件触发器:
CREATE FUNCTION test_event_trigger_for_drops()
RETURNS event_trigger LANGUAGE plpgsql AS $$
DECLARE
obj record;
BEGIN
FOR obj IN SELECT * FROM pg_event_trigger_dropped_objects()
LOOP
RAISE NOTICE '% dropped object: % %.% %',
tg_tag,
obj.object_type,
obj.schema_name,
obj.object_name,
obj.object_identity;
END LOOP;
END;
$$;
CREATE EVENT TRIGGER test_event_trigger_for_drops
ON sql_drop
EXECUTE FUNCTION test_event_trigger_for_drops();
# 9.29.3.处理表重写事件
中显示的功能表9.100提供有关表的信息,其中表_重写
活动刚刚开始。如果在任何其他上下文中调用,则会引发错误。
表9.100.表重写信息函数
作用 描述 |
---|
pg_事件_触发器_表_重写_oid () → 老年人 返回要重写的表的OID。 |
pg_事件_触发器_表_重写_原因 () → 整数 返回解释重写原因的代码。代码的确切含义取决于版本。 |
这些函数可用于以下事件触发器:
CREATE FUNCTION test_event_trigger_table_rewrite_oid()
RETURNS event_trigger
LANGUAGE plpgsql AS
$$
BEGIN
RAISE NOTICE 'rewriting table % for reason %',
pg_event_trigger_table_rewrite_oid()::regclass,
pg_event_trigger_table_rewrite_reason();
END;
$$;
CREATE EVENT TRIGGER test_table_rewrite_oid
ON table_rewrite
EXECUTE FUNCTION test_event_trigger_table_rewrite_oid();