微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在2个表上的WITHUPDATE ..UPDATE上的PostgreSQL TRIGGER

如何解决在2个表上的WITHUPDATE ..UPDATE上的PostgreSQL TRIGGER

我有这样的SQL查询

    WITH whatever1 AS (
        UPDATE
            table1
        SET
            field1 = <some number>
        WHERE
            id = <id>
        RETURNING id,field1
    )
    UPDATE
        table2
    SET
        field2 = (whatever1.field1 * 100000000::BIGINT)::BIGINT
    FROM
        whatever1
    WHERE
        field3 = whatever1.id
    RETURNING
        field3 AS whatever2

并且我有一个不允许我执行上述UPDATE的触发器:

CREATE FUNCTION public.function1()
RETURNS TRIGGER LANGUAGE plpgsql AS
$function$
BEGIN

    IF NEW.field1 != OLD.field1 THEN

        IF (NEW.field1 * 100000000::BIGINT)::BIGINT != (SELECT "field2" FROM table2 WHERE NEW.id = field3) THEN
            RAISE EXCEPTION 'Help me with this trigger so this exception is not raised.';
        END IF;

    END IF;

    RETURN NEW;
END;
$function$;

CREATE TRIGGER trigger1 BEFORE
    INSERT OR UPDATE ON public.table1
    FOR EACH ROW EXECUTE PROCEDURE function1();

请注意比较部分应该可以,因为 select 428872 = (0.00428872 * 100000000::BIGINT)::BIGINT返回true

我想问题是链接UPDATE不能一次更新两个表。 将BEFORE替换为AFTER会有所帮助,但我不理解所有的含义...

我实际上了解了CONSTRAINT TRIGGERDEFERRABLEINITIALLY DEFERREDREFERENCING,但我仍然一无所知,但大多数(如果不是全部的话)都使用AFTER TRIGGER ,而不是BEFORE,甚至很难测试所有可能的组合。

如何更新触发器,以使最上面的SQL查询通过?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。