feat(pgdb): export config discovery functions for display purposes
Add FindConfig, ParseURIConfig, and GetConfigFiles as exported functions to allow callers to retrieve database configuration info without establishing a connection. Useful for version/startup info display.
This commit is contained in:
@@ -42,7 +42,7 @@ type PoolOptions struct {
|
||||
// DefaultPoolOptions returns sensible defaults for pgxpool
|
||||
func DefaultPoolOptions() PoolOptions {
|
||||
return PoolOptions{
|
||||
ConfigFiles: getConfigFiles(),
|
||||
ConfigFiles: GetConfigFiles(),
|
||||
MinConns: 0,
|
||||
MaxConns: 25,
|
||||
MaxConnLifetime: time.Hour,
|
||||
@@ -96,7 +96,7 @@ func OpenPool(ctx context.Context, options PoolOptions) (*pgxpool.Pool, error) {
|
||||
}
|
||||
} else {
|
||||
// Fall back to config file approach
|
||||
pgCfg, err := findAndParseConfig(options.ConfigFiles)
|
||||
pgCfg, _, err := FindConfig(options.ConfigFiles)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@@ -137,8 +137,15 @@ func OpenPoolWithConfigFile(ctx context.Context, configFile string) (*pgxpool.Po
|
||||
return OpenPool(ctx, options)
|
||||
}
|
||||
|
||||
// findAndParseConfig searches for and parses the first existing config file
|
||||
func findAndParseConfig(configFiles []string) (*database.PostgresConfig, error) {
|
||||
// FindConfig searches for and parses the first existing config file.
|
||||
// Returns the PostgresConfig, the path to the config file used, and any error.
|
||||
// If DATABASE_URI env var is set, returns nil config with empty path (use ParseURIConfig instead).
|
||||
func FindConfig(configFiles []string) (*database.PostgresConfig, string, error) {
|
||||
// Check if DATABASE_URI takes precedence
|
||||
if os.Getenv("DATABASE_URI") != "" {
|
||||
return nil, "", nil
|
||||
}
|
||||
|
||||
var errs []error
|
||||
var triedFiles []string
|
||||
|
||||
@@ -161,13 +168,23 @@ func findAndParseConfig(configFiles []string) (*database.PostgresConfig, error)
|
||||
continue
|
||||
}
|
||||
|
||||
return pgCfg, nil
|
||||
return pgCfg, configFile, nil
|
||||
}
|
||||
|
||||
if len(errs) > 0 {
|
||||
return nil, fmt.Errorf("no valid config file found (tried: %v): %w", triedFiles, errors.Join(errs...))
|
||||
return nil, "", fmt.Errorf("no valid config file found (tried: %v): %w", triedFiles, errors.Join(errs...))
|
||||
}
|
||||
return nil, fmt.Errorf("no valid config files provided")
|
||||
return nil, "", fmt.Errorf("no valid config files provided")
|
||||
}
|
||||
|
||||
// ParseURIConfig extracts connection info from DATABASE_URI environment variable.
|
||||
// Returns nil if DATABASE_URI is not set.
|
||||
func ParseURIConfig() (*pgxpool.Config, error) {
|
||||
uri := os.Getenv("DATABASE_URI")
|
||||
if uri == "" {
|
||||
return nil, nil
|
||||
}
|
||||
return pgxpool.ParseConfig(uri)
|
||||
}
|
||||
|
||||
// parseConfigFile reads and parses a YAML config file
|
||||
@@ -205,8 +222,9 @@ func parseConfigFile(configFile string) (*database.PostgresConfig, error) {
|
||||
return nil, fmt.Errorf("no PostgreSQL configuration found in %s", configFile)
|
||||
}
|
||||
|
||||
// getConfigFiles returns the list of config files to search
|
||||
func getConfigFiles() []string {
|
||||
// GetConfigFiles returns the list of config files to search for database configuration.
|
||||
// Checks DATABASE_CONFIG_FILE env var first, otherwise returns default paths.
|
||||
func GetConfigFiles() []string {
|
||||
if configFile := os.Getenv("DATABASE_CONFIG_FILE"); configFile != "" {
|
||||
return []string{configFile}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user