【问题标题】:Replacing trigger procedure without deleting triggers替换触发器过程而不删除触发器
【发布时间】:2014-01-16 14:45:47
【问题描述】:

我有触发程序:

CREATE OR REPLACE FUNCTION my_func() RETURNS trigger AS
$BODY$

    // Do something :-)

    RAISE NOTICE 'Done';

RETURN NEW;
END;
$BODY$
LANGUAGE plpgsql;

它用于审计,我的数据库中的每个表都有调用该过程的触发器。

我要做的是删除“提高通知”行 - 似乎很简单,但事实并非如此。我尝试在没有该行的情况下将新过程插入数据库,认为“创建 od REPLACE" 可以完成这项工作,但我的数据库中仍然只有旧版本。

我认为问题是由与程序相关的触发器引起的。

我是否必须 1. 删除所有触发器(超过 80 个表 => 80 个触发器:( ),2. 用新版本替换过程,3. 重新创建触发器?

或者还有其他方法可以“强制替换”吗?

数据库管理系统:PostgreSQL 9.2.6

【问题讨论】:

    标签: postgresql triggers plpgsql postgresql-9.2


    【解决方案1】:

    我想要做的是删除“raise notice”行 - 似乎很简单,但事实并非如此。我试图在没有该行的情况下将新过程插入数据库,认为“create od REPLACE”会做这项工作,但我的数据库中仍然只有旧版本。

    不。可能是您在错误的数据库、错误的架构中安装了新功能、名称中有拼写错误、未能提交更改或错过了一条错误消息。

    我经常替换触发器函数,它们与任何其他函数没有什么不同 - CREATE OR REPLACE 工作得很好。

    【讨论】:

    • 我确定 db、schema 等是正确的。还是同样的问题。奇怪。
    • 组合一个独立的例子来显示问题,它会被视为一个错误。我的猜测是你将无法复制它。
    猜你喜欢
    • 2021-02-11
    • 1970-01-01
    • 1970-01-01
    • 2021-06-10
    • 2011-04-16
    • 1970-01-01
    • 1970-01-01
    • 2017-10-06
    • 2020-03-20
    相关资源
    最近更新 更多