Обновить строку в триггере ДО УДАЛЕНИЯ - PullRequest
0 голосов
/ 06 марта 2020

Вкратце: мне нужно обновить строку в триггере BEFORE DELETE и получить ошибку:

кортеж, который должен быть обновлен, уже был изменен операцией, запущенной текущей командой

Я знаю, что нет смысла обновлять строку, которая будет удалена, но ...

В моем случае у меня есть функция отмены заказа. Он выполняет некоторые операции, включая удаление кода скидки из заказа (чтобы этот код можно было использовать снова). Я хочу использовать ту же функцию в триггере BEFORE DELETE (удаление ордера также является своего рода отменой).

Теперь мне нужно вручную вызвать функцию отмены и затем удалить ордер , Я хочу избежать риска случайного удаления ордера без предварительного его отмены, поэтому триггер BEFORE DELETE является очевидным выбором.

Есть ли обходной путь? Любые предложения?

Почему я не могу обновить строку, которая будет удалена?

1 Ответ

1 голос
/ 06 марта 2020

Это ограничение, вызванное реализацией, которая удерживает вас от этого. Это связано с концепцией «видимости кортежа» в PostgreSQL.

. Я бы добавил дополнительный boolean параметр modify_row, который по умолчанию равен TRUE, к функции отмены, которая определяет, будет ли строка должно быть обновлено или нет. Затем вы можете вызвать функцию в вашем триггере с помощью modify_row => FALSE.

...