in internal/database/postgres/postgres.go [41:94]
func (h postgresHandler) CreateCloudSQLPool(cfg config.DatabaseConfig) (*sql.DB, error) {
mustGetenv := func(k string, cfg config.DatabaseConfig) string { // Keep mustGetenv here as it's specific to connection
v := ""
switch k {
case "user_name":
v = cfg.User
case "password":
v = cfg.Password
case "database_name":
v = cfg.DBName
case "instance_name":
v = cfg.CloudSQLInstanceConnectionName
case "PRIVATE_IP":
if cfg.UsePrivateIP {
v = "true"
}
}
if v == "" {
return os.Getenv(k) // Fallback to environment variable if not in Config
}
return v
}
dbUser := mustGetenv("user_name", cfg)
dbPwd := mustGetenv("password", cfg)
dbName := mustGetenv("database_name", cfg)
instanceConnectionName := mustGetenv("instance_name", cfg)
usePrivate := mustGetenv("PRIVATE_IP", cfg)
dsn := fmt.Sprintf("user=%s password=%s database=%s", dbUser, dbPwd, dbName)
config, err := pgx.ParseConfig(dsn)
if err != nil {
return nil, err
}
var opts []cloudsqlconn.Option
if usePrivate != "" && strings.ToLower(usePrivate) != "false" && usePrivate != "0" { // Handle boolean-like env vars
opts = append(opts, cloudsqlconn.WithDefaultDialOptions(cloudsqlconn.WithPrivateIP()))
}
d, err := cloudsqlconn.NewDialer(context.Background(), opts...)
if err != nil {
return nil, err
}
config.DialFunc = func(ctx context.Context, network, instance string) (net.Conn, error) {
return d.Dial(ctx, instanceConnectionName)
}
dbURI := stdlib.RegisterConnConfig(config)
dbPool, err := sql.Open("pgx", dbURI)
if err != nil {
return nil, fmt.Errorf("sql.Open: %w", err)
}
return dbPool, nil
}