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