Add dbx library: PostgreSQL cluster with master/replica routing, retry, health checking
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
49
doc.go
Normal file
49
doc.go
Normal file
@@ -0,0 +1,49 @@
|
||||
// Package dbx provides a production-ready PostgreSQL helper library built on top of pgx/v5.
|
||||
//
|
||||
// It manages connection pools, master/replica routing, automatic retries with
|
||||
// exponential backoff, load balancing across replicas, background health checking,
|
||||
// and transaction helpers.
|
||||
//
|
||||
// # Quick Start
|
||||
//
|
||||
// cluster, err := dbx.NewCluster(ctx, dbx.Config{
|
||||
// Master: dbx.NodeConfig{
|
||||
// Name: "master",
|
||||
// DSN: "postgres://user:pass@master:5432/mydb",
|
||||
// Pool: dbx.PoolConfig{MaxConns: 20, MinConns: 5},
|
||||
// },
|
||||
// Replicas: []dbx.NodeConfig{
|
||||
// {Name: "replica-1", DSN: "postgres://...@replica1:5432/mydb"},
|
||||
// },
|
||||
// })
|
||||
// if err != nil {
|
||||
// log.Fatal(err)
|
||||
// }
|
||||
// defer cluster.Close()
|
||||
//
|
||||
// // Write → master
|
||||
// cluster.Exec(ctx, "INSERT INTO users (name) VALUES ($1)", "alice")
|
||||
//
|
||||
// // Read → replica with fallback to master
|
||||
// rows, _ := cluster.ReadQuery(ctx, "SELECT * FROM users WHERE active = $1", true)
|
||||
//
|
||||
// // Transaction → master, panic-safe
|
||||
// cluster.RunTx(ctx, func(ctx context.Context, tx pgx.Tx) error {
|
||||
// _, _ = tx.Exec(ctx, "UPDATE accounts SET balance = balance - $1 WHERE id = $2", 100, fromID)
|
||||
// _, _ = tx.Exec(ctx, "UPDATE accounts SET balance = balance + $1 WHERE id = $2", 100, toID)
|
||||
// return nil
|
||||
// })
|
||||
//
|
||||
// # Routing
|
||||
//
|
||||
// The library uses explicit method-based routing (no SQL parsing):
|
||||
// - Exec, Query, QueryRow, Begin, BeginTx, CopyFrom, SendBatch → master
|
||||
// - ReadQuery, ReadQueryRow → replicas with master fallback
|
||||
// - Master(), Replica() → direct access to specific nodes
|
||||
//
|
||||
// # Retry
|
||||
//
|
||||
// Retryable errors include connection errors (PG class 08), serialization failures (40001),
|
||||
// deadlocks (40P01), and too_many_connections (53300). A custom classifier can be provided
|
||||
// via RetryConfig.RetryableErrors.
|
||||
package dbx
|
||||
Reference in New Issue
Block a user