База данных имеет таблицу 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 (без явной блокировки)? Или, возможно, возможны другие решения?