Как прокомментировал a_horse_with_no_name , то, что вы видите в pgadmin, это обычные блокировки, а не взаимоблокировки .
Из документации Postgres :
PostgreSQL предоставляет различные режимы блокировки для управления одновременным доступом к данным в таблицах.Эти режимы могут использоваться для управляемой приложением блокировки в ситуациях, когда MVCC не дает желаемого поведения.Кроме того, большинство команд PostgreSQL автоматически получают блокировки соответствующих режимов, чтобы гарантировать, что ссылочные таблицы не будут удалены или изменены несовместимыми способами во время выполнения команды.
Экран в pgadmin, вероятно, основан на pg_lock
системный вид .
Блокировки происходят в обычном процессе любой базы данных.Вы не хотите регулярно прерывать сеансы, которые генерируют блокировки, потому что это может по-разному повлиять на ваше приложение и базу данных.Вместо этого вы, вероятно, захотите идентифицировать (возможно, используя pg_lock
представление), проанализировать и оптимизировать запросы, которые вызывают проблемы.
Когда речь идет о концепции deadlock :это специфическая ненормальная ситуация, которая может возникнуть при использовании блокировки, когда два сеанса взаимно ожидают другого.Они обычно указывают на проблемы в логике приложения.
Большинство СУБД автоматически идентифицируют и разрешают такую ситуацию блокировки, и Postgres не является исключением :
PostgreSQL автоматически обнаруживает тупиковые ситуации и разрешает их, отменяя одну изтранзакции, позволяющие другим (их) завершить.(Точно, какая транзакция будет прервана, трудно предсказать, и на нее не следует полагаться.)