@@ -51,9 +51,11 @@ create or replace procedure loop_execute(
5151 time_max numeric default 1 , -- средняя длительность выполнения CTE запроса на каждой итерации цикла, в секундах, рекомендуется 1
5252 -- примерно столько времени CTE запрос может блокировать другие запросы на запись тех же ресурсов
5353 -- от значения этого параметра устанавливаются следующие ограничения:
54- -- lock_timeout = time_max * 1000 / 10
54+ -- lock_timeout = time_max * 1000 / 3
5555 -- statement_timeout = time_max * 1000 * 3
5656 -- если происходит ошибка, связанная с этими ограничениями, batch_rows уменьшается и CTE запрос через некоторое время повторяется
57+ -- Without lock_timeout CTE migration could block other writes WHILE TRYING to grab a lock on the resource (table/record/index/etc.)
58+ -- Without statement_timeout CTE migration could block other writes AFTER grab a lock on the resource (table/record/index/etc.)
5759 is_rollback boolean default false, -- откатывать запрос после каждого выполнения в цикле (для целей тестирования)
5860 cycles_max integer default null , -- максимальное количество циклов (для целей тестирования)
5961 total_table_rows integer default null , -- сколько всего записей в таблице (для вычисления прогресса выполнения)
@@ -246,8 +248,8 @@ BEGIN
246248 EXIT WHEN cycles >= cycles_max;
247249 cycles := cycles + 1 ;
248250
249- PERFORM set_config(' lock_timeout' , (time_max * 10 ^3 / 10 )::text , true);
250- PERFORM set_config(' statement_timeout' , (time_max * 10 ^3 * 3 )::text , true);
251+ PERFORM set_config(' lock_timeout' , ceil (time_max * 10 ^3 / 3 )::text , true);
252+ PERFORM set_config(' statement_timeout' , ceil (time_max * 10 ^3 * 3 )::text , true);
251253
252254 IF is_disable_triggers THEN
253255 set local session_replication_role = ' replica' ;
0 commit comments