我有一个包含两个具有外键约束的列的表,例如:
CREATE TABLE example
(
id integer PRIMARY KEY,
f1 integer REFERENCES example(id),
f2 integer REFERENCES example(id)
);
如果我然后执行插入:
insert into example (id, f1, f2) values (1, 2, 2);
我显然会收到错误,但仅限于第一个失败的约束:
ERROR: insert or update on table "example" violates foreign key constraint "example_f1_fkey"
DETAIL: Key (f1)=(2) is not present in table "example".
我的问题是:是否可以配置postgres,以便在两个失败的键约束时返回错误?
非常感谢, 本
答案 0 :(得分:3)
是否可以配置postgres,以便它返回两个失败的键约束错误?
不,不是。第一个FK故障中止事务,因此不再运行检查。
能够捕获所有违规行为会很有趣,但在当前版本中无法做到这一点(至少在9.3中是真的。)
要做到这一点,您需要能够有选择地将ERROR
约束,外键约束检查等CHECK
级别报告更改为WARNING
,同时设置一个标记'强制事务在当前语句结束时中止。这在技术上可能并不难,但它肯定会涉及PostgreSQL源代码的大量工作。