@@ -2312,19 +2312,20 @@ func ConnectToPostgres(ctx context.Context, logger slog.Logger, driver string, d
2312
2312
2313
2313
var err error
2314
2314
var sqlDB * sql.DB
2315
+ var dbNeedsClosing = true
2315
2316
// Try to connect for 30 seconds.
2316
2317
ctx ,cancel := context .WithTimeout (ctx ,30 * time .Second )
2317
2318
defer cancel ()
2318
2319
2319
2320
defer func () {
2320
- if err == nil {
2321
+ if ! dbNeedsClosing {
2321
2322
return
2322
2323
}
2323
2324
if sqlDB != nil {
2324
2325
_ = sqlDB .Close ()
2325
2326
sqlDB = nil
2327
+ logger .Debug (ctx ,"closed db before returning from ConnectToPostgres" )
2326
2328
}
2327
- logger .Error (ctx ,"connect to postgres failed" ,slog .Error (err ))
2328
2329
}()
2329
2330
2330
2331
var tries int
@@ -2361,12 +2362,7 @@ func ConnectToPostgres(ctx context.Context, logger slog.Logger, driver string, d
2361
2362
}
2362
2363
defer version .Close ()
2363
2364
if ! version .Next () {
2364
- // it's critical we assign to the err variable, otherwise the defer statement
2365
- // that runs db.Close() will not execute it
2366
- if err = version .Err ();err != nil {
2367
- return nil ,xerrors .Errorf ("no rows returned for version select: %w" ,err )
2368
- }
2369
- return nil ,xerrors .Errorf ("no rows returned for version select" )
2365
+ return nil ,xerrors .Errorf ("no rows returned for version select: %w" ,version .Err ())
2370
2366
}
2371
2367
var versionNum int
2372
2368
err = version .Scan (& versionNum )
@@ -2408,6 +2404,7 @@ func ConnectToPostgres(ctx context.Context, logger slog.Logger, driver string, d
2408
2404
// of connection churn.
2409
2405
sqlDB .SetMaxIdleConns (3 )
2410
2406
2407
+ dbNeedsClosing = false
2411
2408
return sqlDB ,nil
2412
2409
}
2413
2410