我可以在postgres中获得所有外键违规吗?

时间:2013-08-22 10:01:18

标签: postgresql postgresql-9.2

我有一个包含两个具有外键约束的列的表,例如:

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,以便在两个失败的键约束时返回错误?

非常感谢, 本

1 个答案:

答案 0 :(得分:3)

  

是否可以配置postgres,以便它返回两个失败的键约束错误?

不,不是。第一个FK故障中止事务,因此不再运行检查。

能够捕获所有违规行为会很有趣,但在当前版本中无法做到这一点(至少在9.3中是真的。)

要做到这一点,您需要能够有选择地将ERROR约束,外键约束检查等CHECK级别报告更改为WARNING,同时设置一个标记'强制事务在当前语句结束时中止。这在技术上可能并不难,但它肯定会涉及PostgreSQL源代码的大量工作。