gpt4 book ai didi

postgresql - 是否可以在设置 SET CONSTRAINTS ALL IMMEDIATE 后恢复延迟约束?

转载 作者:行者123 更新时间:2023-11-29 13:06:02 25 4
gpt4 key购买 nike

我正在使用 pgtap 通过以下方式测试一些延迟约束触发器:

  • 开始交易
  • 插入一些测试数据
  • 执行一些语句
  • 使用 SET CONSTRAINTS ALL IMMEDIATE 模拟提交
  • 测试提交后条件

这很好用,但它限制了我对每笔交易只能进行一次测试。如果我稍后尝试设置更多数据,我之前延迟的约束现在会立即触发。

是否可以恢复 SET CONSTRAINTS ALL IMMEDIATE 的影响,而不恢复它导致激活的约束的影响?如果没有,我唯一的选择是将每个测试移动到一个单独的文件,这有点麻烦。

最佳答案

你试过吗

SET CONSTRAINTS ALL DEFERRED

您调用SET CONSTRAINTS ALL IMMEDIATE 之后?

如果这会延迟比你想要的更多的约束,你将不得不单独命名它们:

SET CONSTRAINTS my_constraint [, ...] DEFERRED;

它不会恢复任何效果。它只会推迟进一步检查。如果违反约束,则会引发 EXCEPTION。此处没有任何可以还原的内容。

如果需要的话,您可以在 plpgsql 函数中捕获异常。

如果您想要将约束恢复到它们的初始状态,您必须单独SET它们并使用显式状态。遗憾的是 - 据我所知 - PostgreSQL 9.1 中没有“RESET CONSTRAINTS”可以将它们全部恢复到初始状态。

Manual page.

关于postgresql - 是否可以在设置 SET CONSTRAINTS ALL IMMEDIATE 后恢复延迟约束?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11798953/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com