gpt4 book ai didi

postgresql - 函数 PostgreSQL 9.5 中的排序结果

转载 作者:行者123 更新时间:2023-11-29 14:09:43 26 4
gpt4 key购买 nike

我正在为插入tableA时触发的触发器设置一个函数,我会首先在tableB中创建一个条目,然后在tableC中创建一些其他条目,其中有一个与tableB相关的外键。但是我得到一个错误,因为它尝试将外键字段中的值插入到 tableC 中,只要该函数未完成运行,该值在 tableB 中就不存在。

有没有一种方法可以在函数内部,在我的函数中放入某种返回值,但不会退出函数然后执行其余部分?看起来像这样的东西:

CREATE OR REPLACE FUNCTION trigger1() RETURNS trigger AS
$BODY$
begin
insert into tableB values (new.value);
RETURN NEW;
insert into tableC (id, fkey) values (new.something, new.value);
RETURN NEW;
end;
$BODY$
LANGUAGE plpgsql;

我试图在两个不同的触发器中分离函数,使用字母顺序来排序执行,但没有成功,可能是因为它们都在运行之前...

有什么想法吗?

谢谢

最佳答案

将表 C 中的外键声明为 DEFERRABLE INITIALLY DEFERRED

来自 the documentation:

DEFERRABLE NOT DEFERRABLE

This controls whether the constraint can be deferred. A constraint that is not deferrable will be checked immediately after every command. Checking of constraints that are deferrable can be postponed until the end of the transaction (using the SET CONSTRAINTS command). NOT DEFERRABLE is the default. Currently, only UNIQUE, PRIMARY KEY, EXCLUDE, and REFERENCES (foreign key) constraints accept this clause. NOT NULL and CHECK constraints are not deferrable.

顺便说一句。函数体中的第一个 RETURN NEW; 没有意义。

关于postgresql - 函数 PostgreSQL 9.5 中的排序结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44114575/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com