поля 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.
Обсуждают сегодня