Documentation
¶
Overview ¶
Package stdpgxfx provides sql.DB connection pools usng pgx/v5.
Index ¶
- func ApplyPoolHostConventions(name string, pcfg *pgxpool.Config, logs *zap.Logger)
- func ApplyPoolHostOverride(name string, pcfg *pgxpool.Config, hosts map[string]string, logs *zap.Logger) bool
- func DeriveSigningRegion(host string) string
- func Provide[DBT any](drv Driver[DBT], mainPoolName string, derivedPoolNames ...string) fx.Option
- func ProvideDeriver(name string, deriver Deriver) fx.Option
- func TestProvide[DBT any](tb testing.TB, mig pgtestdb.Migrator, drv Driver[DBT], mainPoolName string, ...) fx.Option
- type Config
- type Deriver
- type Driver
- type EndRole
- type Params
- type PgtestdbTestMigratorParams
- type Result
- type TestMigrator
- type TestMigratorFunc
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func ApplyPoolHostConventions ¶ added in v0.0.223
ApplyPoolHostConventions applies name-based host conventions to a pool's *pgxpool.Config. Currently, the "ro" pool auto-rewrites an Aurora cluster writer endpoint to the corresponding reader endpoint (e.g., "*.cluster-xxx.<region>.rds.amazonaws.com" → "*.cluster-ro-xxx.<region>.rds.amazonaws.com"). This runs AFTER any user/framework-supplied Deriver so that the pool's host reflects the routing intent encoded by the pool name.
It is exported so that tests (and other layers that build *pgxpool.Config outside of newDB) can apply the same conventions explicitly.
func ApplyPoolHostOverride ¶ added in v0.0.223
func ApplyPoolHostOverride(name string, pcfg *pgxpool.Config, hosts map[string]string, logs *zap.Logger) bool
ApplyPoolHostOverride applies an explicit per-pool host override from the given map (typically Config.Hosts) to the given *pgxpool.Config. It returns true if an override was applied (so callers can skip name-based conventions).
It is exported so that tests (and other layers that build *pgxpool.Config outside of newDB) can apply the same override logic explicitly.
func DeriveSigningRegion ¶ added in v0.0.221
DeriveSigningRegion attempts to extract the AWS region from the given host using the standard RDS regional hostname format. Returns an empty string if the host doesn't match the regional pattern.
func ProvideDeriver ¶ added in v0.0.13
ProvideDeriver is a short-hande function for providing a named deriver function that.
Types ¶
type Config ¶
type Config struct {
// MainDatabaseURL configures the database connection string for the main connection.
MainDatabaseURL string `env:"MAIN_DATABASE_URL,required"`
// IamAuth enables RDS IAM authentication. When enabled, the password on every
// connection attempt is replaced by a freshly built IAM auth token. The signing
// region is derived per-connection from the RDS hostname (e.g.,
// "mycluster.cluster-xxx.eu-central-1.rds.amazonaws.com" → "eu-central-1"),
// which means a derived "ro" pool that points at a different regional endpoint
// (e.g., a reader endpoint in another region) signs tokens against that region
// automatically. The hostname must match the standard regional RDS pattern;
// non-RDS hostnames (e.g., custom domains, RDS Proxy aliases, the global
// writer endpoint) are not supported.
IamAuth bool `env:"IAM_AUTH"`
// Hosts overrides the host for named pools. Useful for Aurora Global Database
// deployments where the secondary region's reader pool should connect to a
// local regional reader endpoint while the writer pool stays on the primary
// region's cluster endpoint.
//
// Format: comma-separated <pool>:<host> pairs.
//
// STDPGX_HOSTS=ro:mycluster.cluster-ro-def.ap-southeast-1.rds.amazonaws.com
// STDPGX_HOSTS=ro:ro-host.example.com,rw:rw-host.example.com
//
// An override wins over name-based conventions (i.e., when a pool's host is
// overridden, the cluster-ro auto-rewrite is skipped). The IAM signing region
// is then derived from the overridden host, so cross-region setups Just Work.
Hosts map[string]string `env:"HOSTS"`
}
Config configures the module.
type Deriver ¶ added in v0.0.13
Deriver needs to be provided by the user of this module if derived pools are created.
type Driver ¶ added in v0.0.117
Driver abstracts turning a pgxpool config into connection pool and closing it.
func NewPgxV5Driver ¶ added in v0.0.117
NewPgxV5Driver inits a driver that uses the pgx v5 pooling.
func NewStandardDriver ¶ added in v0.0.117
NewStandardDriver inits a driver that uses the standard lib sql.DB as a pool.
type EndRole ¶ added in v0.0.120
EndRole defines a type that can be provided if the role that actually connects to the database in tests is different from the migration role.
type PgtestdbTestMigratorParams ¶ added in v0.0.58
type PgtestdbTestMigratorParams struct {
fx.In
Migrator pgtestdb.Migrator
Role *pgtestdb.Role `optional:"true"`
EndRole *EndRole `optional:"true"`
}
PgtestdbTestMigratorParams holds the dependencies for creating a pgtestdb test migrator.
type TestMigrator ¶ added in v0.0.58
type TestMigrator interface {
Migrate(
tb testing.TB,
cfg Config,
pcfg *pgxpool.Config,
) (*pgxpool.Config, error)
}
TestMigrator can be implemented and provided to migrate the database for tests.
func NewPgtestdbTestMigrator ¶ added in v0.0.58
func NewPgtestdbTestMigrator(params PgtestdbTestMigratorParams) TestMigrator
NewPgtestdbTestMigrator implements the TestMigrator using the pgtestdb library.