При старте приложения открывают sql.DB (или pgxpool.Pool) один раз, передают в handlers/repositories. При shutdown вызывают db.Close() - ожидает завершения активных запросов и закрывает пул. Чтобы не принимать новые запросы при shutdown, отменяют контекст сервера (Shutdown) и ждут завершения обработчиков; затем закрывают DB. Таймаут на shutdown ограничивает время ожидания.
srv.Shutdown(ctx)
db.Close()