Является ли нормальным, что функция получает блокировку на уровне базы данных, которая предотвращает автоматическую очистку и создание индекса для совершенно несвязанных таблиц?
У меня есть долго работающая хранимая процедура, которая читает из одной таблицы и записывает _1 _ / _ 2_ данные в другую таблицу. Во время выполнения скрипта (что может занять почти час в больших системах) вся автоматическая очистка останавливается и пытается выполнить такие действия, как создание индексов (CREATE UNIQUE INDEX CONCURRENTLY
) для несвязанных таблиц. чтобы заблокировать. Как только хранимая процедура завершается, заблокированные процессы завершаются.
Думая, что что-то внутри хранимой процедуры неправильно блокирует какой-то ресурс, я переписал это буквально как сон:
CREATE OR REPLACE FUNCTION summarize_day(p_agg_date date)
RETURNS int AS
$$
BEGIN
SELECT pg_sleep(120);
RETURN NULL;
END;
$$ LANGUAGE plpgsql;
Даже эта хранимая процедура бездействия предотвращала автоматическую очистку и другие операции с базой данных.
Есть ли способ закодировать его, чтобы НЕ блокировать базу данных для других операций во время выполнения этой длительной процедуры?