如何解决在2个表上的WITHUPDATE ..UPDATE上的PostgreSQL TRIGGER
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
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 TRIGGER
,DEFERRABLE
,INITIALLY DEFERRED
和REFERENCING
,但我仍然一无所知,但大多数(如果不是全部的话)都使用AFTER
TRIGGER ,而不是BEFORE
,甚至很难测试所有可能的组合。
如何更新触发器,以使最上面的SQL查询通过?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。