golang-migrate Close() не закрывает соединение
Я использую golang-migrate для переноса схемы. Соединение открыто, миграция вверх и вниз работает нормально. Однако соединение с БД не закрывается, не выдает никакой ошибки и оставляет незанятое соединение на сервере базы данных. Мой код выглядит так:
m, err := migrate.New(sourceURL, "database_connection_string")
defer m.Close()
m.Version()
Кто-нибудь сталкивался с подобной проблемой? Как мы можем решить это?
1 ответ
Оператор defer гарантирует, что вызов m.Close() будет выполнен после возврата вашего метода, поэтому не должно иметь значения, где вы размещаете вызов m.Version() в методе, и любые попытки проверить, закрыт ли он изнутри Метод вернет ложный минус.
Я не сталкивался с этой проблемой, но, исходя из вашего опыта, методы Close и Version в golang-migrate подозрительны. Однако это проект с открытым исходным кодом, поэтому в вашей ситуации я бы клонировал их код, вызвал его у вас и отладил эти методы, чтобы увидеть, что происходит. Возможно, вы найдете некоторые идеи, которые помогут вам исправить ваш код, но также возможно, что вы найдете ошибку в их коде.