postgreSQL插入中何时检查表约束



假设我有一个触发器,如果不满足给定条件,它应该可以防止在表中插入某些内容。这意味着我可能应该使用BEFORE INSERT。这是正确的吗?

但是,如果我使用BEFORE INSERT,那么在触发器上运行函数时将不会检查完整性约束。因此,它们可能会违反约束(比如非空约束(。这方面的主要问题是,我可能会尝试使用无效的数据进行操作。

有没有一种方法可以强制检查约束,然后运行触发器,而无需实际先将内容插入表中?

尝试使用无效数据进行操作的危险是什么意思还不清楚。

如果因为在BEFORE触发器中执行操作(例如,被约束排除的除以零(而在该触发器中获得异常,那么该触发器和整个INSERT将被中止,就像约束稍后抛出异常一样。所以没什么好担心的。

另一方面,如果希望在执行检查之前检查约束,只需在AFTER触发器中执行检查即可。在那里抛出异常也会中止插入。

如果两者都有效,则转到BEFORE触发器。如果在插入行之前抛出异常,则肯定不会生成死元组。

最新更新