@@ -2312,19 +2312,20 @@ func ConnectToPostgres(ctx context.Context, logger slog.Logger, driver string, d
23122312
23132313var err error
23142314var sqlDB * sql.DB
2315+ var dbNeedsClosing = true
23152316// Try to connect for 30 seconds.
23162317ctx ,cancel := context .WithTimeout (ctx ,30 * time .Second )
23172318defer cancel ()
23182319
23192320defer func () {
2320- if err == nil {
2321+ if ! dbNeedsClosing {
23212322return
23222323}
23232324if sqlDB != nil {
23242325_ = sqlDB .Close ()
23252326sqlDB = nil
2327+ logger .Debug (ctx ,"closed db before returning from ConnectToPostgres" )
23262328}
2327- logger .Error (ctx ,"connect to postgres failed" ,slog .Error (err ))
23282329}()
23292330
23302331var tries int
@@ -2361,12 +2362,7 @@ func ConnectToPostgres(ctx context.Context, logger slog.Logger, driver string, d
23612362}
23622363defer version .Close ()
23632364if ! 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 ())
23702366}
23712367var versionNum int
23722368err = version .Scan (& versionNum )
@@ -2408,6 +2404,7 @@ func ConnectToPostgres(ctx context.Context, logger slog.Logger, driver string, d
24082404// of connection churn.
24092405sqlDB .SetMaxIdleConns (3 )
24102406
2407+ dbNeedsClosing = false
24112408return sqlDB ,nil
24122409}
24132410