0

我们有一个架构,其中对数据表的修改触发了作业的创建和处理程序的后续处理(用 perl 编写并通过通道通知)。在作业处理期间,处理程序需要更新数据表。为了避免递归,我们:

  1. 需要在更新前禁用触发器
  2. 进行更新和
  3. 再次启用触发器。

由于可能会在项目生命周期的后期添加新的处理程序,因此可能会忘记禁用和启用触发器,因此这可能会成为维护问题。

作为一种替代方法,我们设计了将触发器的范围限制为特定于前端的视图的想法。这些视图可通过instead of触发器写入(另请参阅此问题)。处理程序在作业执行期间直接更新数据表,因此不会触发任何递归作业。我们有这种方法的有效实施。

在我看来,我们在这里交换复杂性:结构(附加视图)的算法(启用禁用触发器)。我们目前倾向于选择后者,但我想请你们就此事提供一些意见……这是一种合理的方法吗?

4

1 回答 1

1

我会考虑使用不同的用户。触发器仅在用户 <> 'handler' 时运行。您可以将自定义函数设置为作为“安全定义者”运行,这意味着创建它们的用户。您可以将条件添加到可以检查当前用户的触发器定义 (WHEN)。

然后查看pgtap,它可以让你检查你没有错过任何东西。

于 2013-03-12T18:10:19.563 回答