From c41e2674cf235c4092f6751b95cb525314796b9b Mon Sep 17 00:00:00 2001 From: Qiao Han Date: Tue, 25 Nov 2025 13:49:12 +0800 Subject: [PATCH] fix: ping database host instead of resolving dns --- internal/utils/flags/db_url.go | 26 ++++++++++++++++---------- 1 file changed, 16 insertions(+), 10 deletions(-) diff --git a/internal/utils/flags/db_url.go b/internal/utils/flags/db_url.go index 4dca1d936..26282d346 100644 --- a/internal/utils/flags/db_url.go +++ b/internal/utils/flags/db_url.go @@ -10,6 +10,7 @@ import ( "net/http" "os" "strings" + "time" "github.com/cenkalti/backoff/v4" "github.com/go-errors/errors" @@ -131,17 +132,22 @@ func NewDbConfigWithPassword(ctx context.Context, projectRef string) (pgconn.Con } logger := utils.GetDebugLogger() // Use pooler if host is not reachable directly - if _, err := net.DefaultResolver.LookupIPAddr(ctx, config.Host); err != nil { - if poolerConfig := utils.GetPoolerConfig(projectRef); poolerConfig != nil { - if len(config.Password) > 0 { - fmt.Fprintln(logger, "Using database password from env var...") - poolerConfig.Password = config.Password - } else if err := initPoolerLogin(ctx, projectRef, poolerConfig); err != nil { - utils.CmdSuggestion = suggestEnvVar - return *poolerConfig, err - } - return *poolerConfig, nil + d := net.Dialer{Timeout: 5 * time.Second} + if conn, err := d.DialContext(ctx, "udp", config.Host+":53"); err == nil { + if err := conn.Close(); err != nil { + fmt.Fprintln(logger, err) + } + fmt.Fprintf(logger, "Resolved DNS: %v\n", conn.RemoteAddr()) + } else if poolerConfig := utils.GetPoolerConfig(projectRef); poolerConfig != nil { + if len(config.Password) > 0 { + fmt.Fprintln(logger, "Using database password from env var...") + poolerConfig.Password = config.Password + } else if err := initPoolerLogin(ctx, projectRef, poolerConfig); err != nil { + utils.CmdSuggestion = suggestEnvVar + return *poolerConfig, err } + return *poolerConfig, nil + } else { utils.CmdSuggestion = fmt.Sprintf("Run %s to setup IPv4 connection.", utils.Aqua("supabase link --project-ref "+projectRef)) return config, errors.Errorf("IPv6 is not supported on your current network: %w", err) }