поля id, status (INT)
Есть таблица sale_item, в ней поля sale_id, status(INT), где sale_id ссылается на sale.id (один к многим)
в полях sale.status и sale_item.status могут быть разные числа-статусы,
sale.status - всегда минимальный из значений соответствующих status_item
Менять можно и sale.status и sale_item.status,
Нужно реализовать логику на триггерах,
Очевидно, что триггера нужны в обоих таблицах,
ВОПРОС: Как лучше избежать кольцевого зацикливания?
Есть ли какой-то штатный простой способ?
а кто первоначальный инициатор изменений ? наверно какой-то код ?
Можно через guc, в начале каждой функции проверяете через current_setting, не установлен ли в true параметр, например, sale_status.from_trig, а сам апдейт оборачиваете в perform set_config('sale_status.from_trig', 'true', true); и такой же вызов со значением 'false' после запроса. Но вообще, необходимость такой проверки намекает, что, возможно, вы слишком перемудряете с триггерами.
Спасибо! Насчет перемудрить - не вижу, как такую логику реализовать иначе.
Я не вчитывался, но у меня сложилось впечатление, что у вас два связанных параметра из двух разных таблиц, которые вы хотите иметь возможность обновлять и через одну, и через другую таблицу. Это очень плохая практика, т.к. при одновременном запуске двух разных апдейтов, вы получаете почти гарантированный deadlock.
Обсуждают сегодня