Database
Configuration
Config schema, defaults, merge rules, and validation behavior
Root Config (database.Config)
Databases []DatabaseConfigDefault stringRequireConfig bool
Default Behavior
When no config is found and no effective programmatic config is provided, the extension defaults to one in-memory sqlite database:
- name:
default - type:
sqlite - dsn:
file::memory:?cache=shared
Config Loading Order
On register:
- bind
extensions.databaseif present - else bind
databaseif present - else use programmatic/default behavior
If RequireConfig == true and no config file key is found, register fails.
Database Entry (DatabaseConfig)
Core fields:
NameTypeDSN
Pooling fields:
MaxOpenConnsMaxIdleConnsConnMaxLifetimeConnMaxIdleTime
Retry and timeout fields:
MaxRetriesRetryDelayConnectionTimeoutQueryTimeout
Observability fields:
SlowQueryThresholdDisableSlowQueryLoggingAutoExplainThreshold
Health fields:
HealthCheckInterval
Extra backend-specific values:
Config map[string]any
Validation Rules
Validation fails when:
- no databases configured
- duplicate database names
- empty
Name,Type, orDSN - negative pool/timeout values
MaxIdleConns > MaxOpenConns
Programmatic Configuration Example
dbExt := database.NewExtension(
database.WithDefault("primary"),
database.WithDatabases(
database.DatabaseConfig{
Name: "primary",
Type: database.TypePostgres,
DSN: os.Getenv("DATABASE_URL"),
MaxOpenConns: 40,
MaxIdleConns: 10,
ConnMaxLifetime: 10 * time.Minute,
ConnMaxIdleTime: 5 * time.Minute,
MaxRetries: 3,
RetryDelay: time.Second,
ConnectionTimeout: 10 * time.Second,
QueryTimeout: 30 * time.Second,
SlowQueryThreshold: 200 * time.Millisecond,
AutoExplainThreshold: 1 * time.Second,
},
database.DatabaseConfig{
Name: "analytics",
Type: database.TypeMongoDB,
DSN: os.Getenv("MONGO_URL"),
Config: map[string]any{
"database": "analytics",
},
},
),
)YAML Example
extensions:
database:
default: primary
databases:
- name: primary
type: postgres
dsn: ${DATABASE_URL}
max_open_conns: 40
max_idle_conns: 10
conn_max_lifetime: 10m
conn_max_idle_time: 5m
max_retries: 3
retry_delay: 1s
connection_timeout: 10s
query_timeout: 30s
slow_query_threshold: 200ms
auto_explain_threshold: 1s
- name: cache
type: redis
dsn: ${REDIS_URL}Security Note: DSN Logging
Use database.MaskDSN(dsn, dbType) for safe logs.
It masks credentials for postgres, mysql, mongodb, and redis DSN formats.
How is this guide?