【发布时间】:2020-04-15 21:56:09
【问题描述】:
我试图以某种方式在删除表时触发自动删除函数,但我不知道该怎么做。
TL;DR:有没有办法在删除特定表时触发函数删除? (POSTGRESQL 11.7)
详细解释
我将尝试使用带有虚拟名称的简化用例来解释我的问题。
-
我有三个表:sensor1、sensor2和sumSensors;
创建了一个 FUNCTION (sumdata) 以在 sumSensors 表上插入数据。在这个函数中,我将从 sensor1 和 sensor2 表中获取数据并将其总和插入到表 sumSensors 中;
-
为每个传感器表创建了一个触发器,如下所示:
创建触发器 trig1 插入传感器 1 后 对于每一行执行 函数 sumdata();
-
现在,当在表 sensor1 OR sensor2 上插入新行时,函数sumdata 将被执行并将两个表 sumSensors 中最后一个值的总和插入
李>
如果我想 DROP FUNTION sumdata CASCADE;,触发器将自动从表 sensor1 和 sensor2 中删除。到现在为止一切都很好!但这不是我想要的。
我的问题是:
问:如果我只是 DROP TABLE sumSensors CASCADE;?本来要插入此表的函数会发生什么情况?
A:正如预期的那样,由于 sumSensors 表和 sumdata 函数之间没有关联,所以 函数不会被删除(仍然存在)! 使用它的触发器也会发生同样的情况(仍然存在)。这意味着当在传感器表上插入新行时,函数 sumdata 将被执行并损坏,导致失败(即使是触发函数执行的 INSERT 也不会实际插入)。
有没有办法在删除特定表时触发函数删除?
提前谢谢你
【问题讨论】:
标签: postgresql function triggers drop