Я каким-то образом пытаюсь вызвать автоматическое отключение функции, когда таблица удаляется, и я не могу понять, как это сделать.
TL; DR: есть ли способ вызвать сброс функции при удалении определенной таблицы? (POSTGRESQL 11.7)
Подробное объяснение
Я попытаюсь объяснить свою проблему, используя упрощенный вариант использования с фиктивными именами.
У меня есть три таблицы: sensor1, sensor2 и sumSensors;
Была создана ФУНКЦИЯ (sumdata) для ВСТАВКИ данных в таблицу sumSensors. Внутри этой функции я получу данные из таблиц sensor1 и sensor2 и вставлю их сумму в таблицу sumSensors;
Для каждой таблицы датчиков был создан триггер, который выглядит следующим образом:
СОЗДАТЬ ТРИГГЕР trig1 ПОСЛЕ ВСТАВКИ sensor1 ДЛЯ КАЖДОЙ СТРОКИ ВЫПОЛНИТЬ ФУНКЦИЮ sumdata ();
Теперь, когда новая строка вставлена в таблицы sensor1 OR sensor2, функция sumdata будет выполнен, и вставит сумму последних значений из обоих в таблицу sumSensors
Если бы я хотел DROP FUNTION sumdata CASCADE;
, триггеры автоматически удалялись бы из таблиц sensor1 и sensor2. До сих пор все нормально! Но я не этого хочу.
Моя проблема:
В: А если я просто DROP TABLE sumSensors CASCADE;
? Что произойдет с функцией, которую нужно вставить в эту таблицу?
О: Как и ожидалось, поскольку нет связи между таблицей sumSensors и функцией sumdata, функция не будет удалена (все еще существует)! То же самое происходит с триггерами, которые его используют (все еще существуют). Это означает, что при вставке новой строки в таблицы датчиков функция sumdata будет выполнена и повреждена, что приведет к сбою (даже INSERT, который инициировал выполнение функции, на самом деле не будет вставлен).
Есть ли способ вызвать сброс функции при удалении определенной таблицы?
заранее спасибо