【发布时间】:2018-08-09 21:04:36
【问题描述】:
我正在将数据从一个 PostgreSQL v10 表复制到另一个。目标表有几个外键约束。我很惊讶我没有收到任何错误,即使外键约束引用的表都没有任何数据。
在进行复制之前,我使用DISABLE TRIGGER ALL 确保目标表上定义的触发器不会触发。我很惊讶复制成功。在ENABLE TRIGGER ALL 之后,我尝试再添加一行,即现有行的副本。因违反外键约束而失败。然后我做了DISABLE TRIGGER ALL,尝试添加新行,成功了。
我得出结论,在 PostgreSQL 10 中,DISABLE TRIGGER ALL 将禁用外键约束检查。这是预期的行为吗?
详情可见here。
【问题讨论】:
-
不仅在 Postgres 10 中,而且在所有版本中。毕竟
FOREIGN KEY约束是用约束触发器实现的:dba.stackexchange.com/a/102498/3684
标签: sql postgresql foreign-keys database-trigger