【问题标题】:postgresql trigger fire on update but fail on insertpostgresql 在更新时触发触发但在插入时失败
【发布时间】:2015-03-11 17:59:02
【问题描述】:

我有一个 Postgresql 触发器,见下文。我的问题是当我添加一个新行并将官员角色设置为 USER 并将请求的优先级设置为 HIGH 时,我应该获得未授权但我获得了授权。当我更新行时,触发器触发并将单元格更改为未授权。有没有人了解这一点并可以为我提供解决方案? :) 为什么它不适用于插入和更新?

CREATE OR REPLACE FUNCTION priority_authorization() RETURNS trigger AS $BODY$
BEGIN
IF ((NEW.t_officer_role = 'USER') AND (NEW.priority_of_request = 'HIGH'))THEN
  NEW.t_priority_auth :='NOT AUTHORIZED';
ELSEIF NEW.t_officer_role = 'INVALID' THEN
NEW.t_priority_auth :='NOT AUTHORIZED';
ELSE
  NEW.t_priority_auth :='AUTHORIZED';
END IF;
RETURN NEW;
END; $BODY$ LANGUAGE plpgsql VOLATILE;

CREATE TRIGGER priority_authorization_trigger BEFORE INSERT OR UPDATE ON durs_centroid
FOR EACH ROW
EXECUTE PROCEDURE priority_authorization();

【问题讨论】:

    标签: postgresql triggers


    【解决方案1】:

    触发器和函数似乎没问题。一定有其他事情在你的问题之外。就像另一个触发器干扰或混淆表名......

    通过在函数顶部添加以下代码进行调试:

    RAISE NOTICE 't_officer_role: >>%<<, priority_of_request: >>%<<'
        , NEW.t_officer_role, NEW.priority_of_request;
    

    【讨论】:

    • 感谢您的想法,还有另一个触发器来填充用户角色,现在我将两个触发器合二为一并且工作正常。
    猜你喜欢
    • 1970-01-01
    • 2018-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-24
    • 1970-01-01
    • 2018-06-23
    • 2013-06-11
    相关资源
    最近更新 更多