В базе данных есть таблица X и таблицы An, Bn, Cn, Dn, которые унаследованы от X.
Процесс 1 периодически запрашивает данные из X.
Процесс 2 обновляет данные в дочерних таблицах. Например, для обновления таблиц An и Bn он создает новые таблицы Am и Bm, загружает в них данные, блокирует монопольный доступ An, Bn, удаляет An и Bn и изменяет Am и Bm, чтобы они наследовали X.
Проблема в том, что когда процесс 1 выполняет запрос (например select * from X
) он блокирует таблицы An, Bn, Cn, Dn в разделяемом режиме, и порядок блокировки неизвестен. Если процесс 1 блокирует Bn, то процесс 2 блокирует An, и мы имеем взаимоблокировку.
Есть ли информация о порядке блокировки таблиц в запросах в postgresql (без явной блокировки)? Или может быть возможны другие решения?