问题描述
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 (将#修改为@)