В последнее время мы испытываем очень странные блокировки на PostgreSQL 11.7, когда обрабатываем задачи ETL с использованием наших программ в Go 1.13.8 с использованием стандартных библиотек sql и pq.
Задача ETL должна переименовывать таблицы, но PostgreSQL показывает, что эта простая операция ожидает блокировки отношения и выбора из вики PG (https://wiki.postgresql.org/wiki/Lock_Monitoring), которая должна отображать процесс блокировки, показывает, что команда «alter table .... rename to ....» заблокирован процессом «COPY .... to stdout», но из совершенно другой таблицы.
UPDATE: я изменил запрос из PG wiki, и он показал этот сеанс блокировки фактически активен в течение ~ 12 часов, хотя последняя команда COPY выполняется только в течение нескольких минут и является совершенно другой задачей ETL.
Возможно ли, что библиотека golang не закрывает сессию должным образом и повторно использует ее при совершенно другом запуске другой задачи ETL? Хотя я действительно откладываю db.close () везде ...
И время от времени даже выбор из некоторых таблиц кажется заблокированным командами копирования, работающими в других таблицах. Это показано тем же выбором из PG wiki для блокировки запросов.
Все это работает из golang программ. Так может проблема не в PostgreSQL, а в golang библиотеках?