【问题标题】:Dynamic trigger function to be called from multiple tables POSTGRESQL要从多个表 POSTGRESQL 调用的动态触发器函数
【发布时间】:2015-06-01 20:03:30
【问题描述】:

我是 PostgreSQL 新手,想知道是否有一种方法可以为插入和更新操作创建一个触发器函数,该函数可以从多个表中调用?

【问题讨论】:

  • 是的,这是可能的,参见例如这里:wiki.postgresql.org/wiki/Audit_trigger_91plus
  • 感谢您的链接。就我而言,我有 20 个主表和 20 个临时表。主表上的任何事件(如插入或更新)都应在其各自的临时表上插入/更新数据。我可以通过只创建一个触发器函数并从不同的表中调用它来实现吗?

标签: postgresql triggers


【解决方案1】:

是的,您可以创建一个触发器过程并从不同的表中调用它。在触发器过程中,您可以访问几个特殊变量,这些变量提供有关调用触发器的表的元数据,即TG_TABLE_NAMETG_TABLE_SCHEMA。使用这些元数据,您可以根据调用它的表准确地定义触发器必须执行的操作。

来自documentation

TG_TABLE_NAME数据类型名称;导致 触发调用。

TG_TABLE_SCHEMA数据类型名称;的名字 导致触发器调用的表的架构。

变量TG_OP提供导致触发器被调用的操作:

TG_OP数据类型文本;由 INSERT、UPDATE、DELETE 或 TRUNCATE 组成的字符串 告知触发了触发器的操作。

其他非常有用的特殊变量是NEWOLD。它们包含由数据库操作更改的旧数据和新数据:

NEW数据类型记录;保存新数据库行的变量 行级触发器中的 INSERT/UPDATE 操作。这个变量是 在语句级触发器和 DELETE 操作中未分配。

OLD数据类型记录;保存旧数据库行的变量 行级触发器中的 UPDATE/DELETE 操作。这个变量是 在语句级触发器和 INSERT 操作中未分配。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-04-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-22
    • 1970-01-01
    • 2021-06-09
    相关资源
    最近更新 更多