使用可修改的视图限制触发器范围

时间:2013-03-12 13:04:31

标签: postgresql triggers views

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

  1. 需要在更新前禁用触发器
  2. 进行更新和
  3. 再次启用触发器。
  4. 由于新的处理程序可能会在项目生命周期中稍后添加,因此可能会忘记禁用和启用触发器,因此这可能会成为维护问题。

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

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

1 个答案:

答案 0 :(得分:1)

我会考虑使用不同的用户。触发器仅在用户<>时运行“处理程序”。您可以将自定义函数设置为“安全定义器”,即创建它们的用户。您可以添加一个条件来触发可以检查当前用户的定义(WHEN)。

然后查看pgtap,它会让你检查你没有遗漏任何东西。