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 使其返回两个失败的键约束的错误?

非常感谢,本

4

1 回答 1

3

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

不,不是。第一个 FK 失败会中止事务,因此不会运行进一步的检查。

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

要做到这一点,您需要能够有选择地将约束、外键约束检查等的ERROR级别报告更改为s,该 s 还设置了一个标志,该标志将强制事务在当前语句的末尾中止。从技术上讲,这可能并不太难,但肯定会涉及到 PostgreSQL 源代码的大量工作。CHECKWARNING

于 2013-08-22T10:04:17.753 回答