stdpgxfx

package
v0.0.225 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Apr 30, 2026 License: MIT Imports: 20 Imported by: 0

Documentation

Overview

Package stdpgxfx provides sql.DB connection pools usng pgx/v5.

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func ApplyPoolHostConventions added in v0.0.223

func ApplyPoolHostConventions(name string, pcfg *pgxpool.Config, logs *zap.Logger)

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

func DeriveSigningRegion(host string) string

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 Provide

func Provide[DBT any](drv Driver[DBT], mainPoolName string, derivedPoolNames ...string) fx.Option

Provide components as fx dependencies.

func ProvideDeriver added in v0.0.13

func ProvideDeriver(name string, deriver Deriver) fx.Option

ProvideDeriver is a short-hande function for providing a named deriver function that.

func TestProvide

func TestProvide[DBT any](
	tb testing.TB, mig pgtestdb.Migrator, drv Driver[DBT], mainPoolName string, derivedPoolNames ...string,
) fx.Option

TestProvide provides the package's components as an fx module with a setup more useful for testing.

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

type Deriver func(logs *zap.Logger, base *pgxpool.Config) *pgxpool.Config

Deriver needs to be provided by the user of this module if derived pools are created.

type Driver added in v0.0.117

type Driver[DBT any] interface {
	NewPool(pcfg *pgxpool.Config) (DBT, error)
	Close(pool DBT) error
}

Driver abstracts turning a pgxpool config into connection pool and closing it.

func NewPgxV5Driver added in v0.0.117

func NewPgxV5Driver() Driver[*pgxpool.Pool]

NewPgxV5Driver inits a driver that uses the pgx v5 pooling.

func NewStandardDriver added in v0.0.117

func NewStandardDriver() Driver[*sql.DB]

NewStandardDriver inits a driver that uses the standard lib sql.DB as a pool.

type EndRole added in v0.0.120

type EndRole struct {
	Username string
	Password string
}

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 Params

type Params struct {
	fx.In

	Config    Config
	AwsConfig aws.Config `optional:"true"`
	Logs      *zap.Logger
}

Params describe the main parameters for providing components.

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 Result

type Result struct {
	fx.Out

	PoolConfig *pgxpool.Config
}

Result describe the main components provided for this module.

func New

func New(params Params) (r Result, err error)

New is the main constructor. In this package it only provides the pool configuration used through out the package.

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.

type TestMigratorFunc added in v0.0.58

type TestMigratorFunc func(
	tb testing.TB,
	cfg Config,
	pcfg *pgxpool.Config,
) (*pgxpool.Config, error)

TestMigratorFunc makes it easy to implement the migrator.

func (TestMigratorFunc) Migrate added in v0.0.58

func (f TestMigratorFunc) Migrate(
	tb testing.TB, cfg Config, pcfg *pgxpool.Config,
) (*pgxpool.Config, error)

Migrate implements the TestMigrator interface.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL