Use Grove instead.
SQL Backends (postgres, mysql, sqlite)01
Implementation type: *database.SQLDatabase
Behavior
retries open with exponential backoff (capped)
applies connection pool settings from
DatabaseConfigwraps native
*sql.DBwith Bun*bun.DBattaches query observability hook
supports transaction helpers with panic recovery
Native Access
Driver() anyreturns*sql.DBDB()returns*sql.DBBun()returns*bun.DB
Observability
slow query logging (
SlowQueryThreshold)query duration histogram and error counter
optional auto-explain via
AutoExplainThreshold
MongoDB Backend (mongodb)02
Implementation type: *database.MongoDatabase
Behavior
retries connect with exponential backoff
configures pool limits and idle timeout
derives DB name from
config["database"]or DSN pathadds command monitor for duration/error metrics
Native Access
Driver() anyreturns*mongo.ClientClient()returns*mongo.ClientDatabase()returns*mongo.DatabaseCollection(name)convenience accessor
Transactions
supports
TransactionandTransactionWithOptionsrecovers panics and records metrics
Redis Backend (redis)03
Implementation type: *database.RedisDatabase
DSN Formats Supported
standalone:
redis://host:6379/0TLS:
rediss://host:6379/0cluster:
redis://host1:6379,host2:6379/0sentinel:
redis-sentinel://user:pass@host1:26379,host2:26379/master/0
Behavior
parses DSN into
redis.UniversalOptionsauto-detects mode: standalone / cluster / sentinel
applies pool and timeout settings from
DatabaseConfigadds command and pipeline observability hooks
Native Access
Driver() anyreturnsredis.UniversalClientClient()returnsredis.UniversalClientPipeline()/TxPipeline()convenience methods
Transaction Semantics
Transaction(...)uses WATCH-based flowPipelined(...)andTxPipelined(...)include panic recovery
Health and State Across Drivers04
All driver wrappers expose:
Ping(ctx)Health(ctx)returning latency + messageconnection
State()andIsOpen()backend
Stats()in a normalizedDatabaseStatsshape