PostgreSQL - golang программы вызывают странные блокировки - PullRequest
0 голосов
/ 09 марта 2020

В последнее время мы испытываем очень странные блокировки на 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 библиотеках?

...