我们有一个架构,对数据表的修改会触发创建作业和后续处理程序(用perl编写并通过通道通知)。在作业处理期间,处理程序需要更新数据表。为了避免递归,我们:
由于新的处理程序可能会在项目生命周期中稍后添加,因此可能会忘记禁用和启用触发器,因此这可能会成为维护问题。
作为替代方法,我们设计了将触发器的范围限制为前端特定视图的想法。这些视图可由instead of
触发器编写(另请参阅this question)。处理程序在作业执行期间直接更新数据表,因此不会触发任何递归作业。我们已经开始实施这种方法。
在我看来,我们在这里交易复杂性:算法(启用禁用触发器)用于结构(附加视图)。我们目前倾向于选择后者,但我希望你们就此事提出一些意见......这是一种合理的做法吗?
答案 0 :(得分:1)
我会考虑使用不同的用户。触发器仅在用户<>时运行“处理程序”。您可以将自定义函数设置为“安全定义器”,即创建它们的用户。您可以添加一个条件来触发可以检查当前用户的定义(WHEN)。
然后查看pgtap,它会让你检查你没有遗漏任何东西。