транзакций, а внутри функций нельзя создавать транзакции. А как, если функции (SQL, процедурные) вызывают подобные функции внутри себя, создаются транзакции ещё, сколько транзакций в итоге?
Вызывающая функция начинает транзакцию, вызываемые - работают в той же созданной транзакции.
т.е. если я хочу уменьшить время транзакций, то лучше сделать 10 функций и чтобы клиент вызывал их по очереди, чем запихать вызовы этих 10 функций в одну и чтобы клиент работал только с ней?
Не создаются. Транзакция всегда максимум одна, вложенных транзакций не существует. Есть `SAVEPOINT`s (на их основе реализованы исключения в языках хранимых функций). Только в процедурах (и DO) можно (очень ограниченно) управлять транзакциями (откатывать или завершать (и тут же автоматически начинать новую)).
Скорее всего, наоборот (так round-trips примерно в 10 раз меньше).
у меня проблема в том, что функция работает на реплике(-ах), при большом объёме обрабатываемых данных это работает долго и мастер пухнет
Значит, Вы сравниваете совсем не эквивалентные вещи — в одном случае это 10 транзакций, а в другом только одна, так?
да, я хочу чтобы у меня было 10 коротких транзакций, чем одна длинная по времени. данные всё в БД остаются, в параметрах функций только id'шники
Хмм... в плане ACID это совсем разные вещи, но если это устраивает — вызывайте каждую из 10 функций в отдельной (возможно, неявной) транзакции.
разные, да. Спасибо за разъяснения всем!
Обсуждают сегодня