Documentation
¶
Overview ¶
Package db provides a unified interface for connecting to and interacting with multiple database types including MySQL, PostgreSQL, SQLite, and TimescaleDB. It implements common database operations with type-specific optimizations.
Index ¶
- Variables
- type Config
- type Database
- type DatabaseConnectionConfig
- type Manager
- func (m *Manager) Close(id string) error
- func (m *Manager) CloseAll() error
- func (m *Manager) Connect() error
- func (m *Manager) GetConnectedDatabases() []string
- func (m *Manager) GetDatabase(id string) (Database, error)
- func (m *Manager) GetDatabaseConfig(id string) (DatabaseConnectionConfig, error)
- func (m *Manager) GetDatabaseType(id string) (string, error)
- func (m *Manager) IsLazyLoading() bool
- func (m *Manager) ListDatabases() []string
- func (m *Manager) LoadConfig(configJSON []byte) error
- func (m *Manager) SetLazyLoading(enabled bool)
- type MultiDBConfig
- type PostgresSSLMode
- type SQLiteJournalMode
Constants ¶
This section is empty.
Variables ¶
var ( ErrNotFound = errors.New("record not found") ErrAlreadyExists = errors.New("record already exists") ErrInvalidInput = errors.New("invalid input") ErrNotImplemented = errors.New("not implemented") ErrNoDatabase = errors.New("no database connection") )
Common database errors
Functions ¶
This section is empty.
Types ¶
type Config ¶
type Config struct {
Type string
Host string
Port int
User string
Password string
Name string
// Additional PostgreSQL specific options
SSLMode PostgresSSLMode
SSLCert string
SSLKey string
SSLRootCert string
ApplicationName string
ConnectTimeout int // in seconds
QueryTimeout int // in seconds, default is 30 seconds
TargetSessionAttrs string // for PostgreSQL 10+
Options map[string]string // Extra connection options
// SQLite specific options
DatabasePath string // Path to SQLite database file
EncryptionKey string // Key for SQLCipher encryption
ReadOnly bool // Open database in read-only mode
CacheSize int // SQLite cache size (in pages)
JournalMode SQLiteJournalMode // Journal mode for SQLite
UseModerncDriver bool // Use modernc.org/sqlite driver instead of mattn/go-sqlite3
// Oracle specific options
ServiceName string // Oracle service name (preferred over SID)
SID string // Oracle SID (legacy)
WalletLocation string // Path to Oracle Cloud wallet
TNSAdmin string // Path to tnsnames.ora directory
TNSEntry string // TNS entry name from tnsnames.ora
Edition string // Oracle Edition-Based Redefinition
Pooling bool // Enable connection pooling
StandbySessions bool // Allow connections to standby database
NLSLang string // NLS_LANG setting (e.g., "AMERICAN_AMERICA.AL32UTF8")
// Connection pool settings
MaxOpenConns int
MaxIdleConns int
ConnMaxLifetime time.Duration
ConnMaxIdleTime time.Duration
}
Config represents database connection configuration
func (*Config) SetDefaults ¶
func (c *Config) SetDefaults()
SetDefaults sets default values for the configuration if they are not set
type Database ¶
type Database interface {
// Core database operations
Query(ctx context.Context, query string, args ...interface{}) (*sql.Rows, error)
QueryRow(ctx context.Context, query string, args ...interface{}) *sql.Row
Exec(ctx context.Context, query string, args ...interface{}) (sql.Result, error)
// Transaction support
BeginTx(ctx context.Context, opts *sql.TxOptions) (*sql.Tx, error)
// Connection management
Connect() error
Close() error
Ping(ctx context.Context) error
// Metadata
DriverName() string
ConnectionString() string
QueryTimeout() int
// DB object access (for specific DB operations)
DB() *sql.DB
}
Database represents a generic database interface
func NewDatabase ¶
NewDatabase creates a new database connection based on the provided configuration
type DatabaseConnectionConfig ¶ added in v1.3.0
type DatabaseConnectionConfig struct {
ID string `json:"id"` // Unique identifier for this connection
Type string `json:"type"` // mysql, postgres, oracle, or sqlite
Host string `json:"host"`
Port int `json:"port"`
User string `json:"user"`
Password string `json:"password"`
Name string `json:"name"`
// PostgreSQL specific options
SSLMode string `json:"ssl_mode,omitempty"`
SSLCert string `json:"ssl_cert,omitempty"`
SSLKey string `json:"ssl_key,omitempty"`
SSLRootCert string `json:"ssl_root_cert,omitempty"`
ApplicationName string `json:"application_name,omitempty"`
ConnectTimeout int `json:"connect_timeout,omitempty"`
QueryTimeout int `json:"query_timeout,omitempty"` // in seconds
TargetSessionAttrs string `json:"target_session_attrs,omitempty"`
Options map[string]string `json:"options,omitempty"`
// SQLite specific options
DatabasePath string `json:"database_path,omitempty"` // Path to SQLite database file
EncryptionKey string `json:"encryption_key,omitempty"` // Key for SQLCipher encryption
ReadOnly bool `json:"read_only,omitempty"` // Open database in read-only mode
CacheSize int `json:"cache_size,omitempty"` // SQLite cache size (in pages)
JournalMode string `json:"journal_mode,omitempty"` // Journal mode for SQLite
UseModerncDriver bool `json:"use_modernc_driver,omitempty"` // Use modernc.org/sqlite driver instead of mattn/go-sqlite3
// Connection pool settings
MaxOpenConns int `json:"max_open_conns,omitempty"`
MaxIdleConns int `json:"max_idle_conns,omitempty"`
ConnMaxLifetime int `json:"conn_max_lifetime_seconds,omitempty"` // in seconds
ConnMaxIdleTime int `json:"conn_max_idle_time_seconds,omitempty"` // in seconds
}
DatabaseConnectionConfig represents a single database connection configuration
type Manager ¶ added in v1.3.0
type Manager struct {
// contains filtered or unexported fields
}
Manager manages multiple database connections
func NewDBManager ¶ added in v1.3.0
func NewDBManager() *Manager
NewDBManager creates a new database manager
func (*Manager) Connect ¶ added in v1.3.0
Connect establishes connections to all configured databases If lazy loading is enabled, performs health check on one database of each type
func (*Manager) GetConnectedDatabases ¶ added in v1.6.2
GetConnectedDatabases returns a list of all connected databases
func (*Manager) GetDatabase ¶ added in v1.6.2
GetDatabase retrieves a database connection by ID If lazy loading is enabled and the connection doesn't exist, it will be established on-demand
func (*Manager) GetDatabaseConfig ¶ added in v1.6.2
func (m *Manager) GetDatabaseConfig(id string) (DatabaseConnectionConfig, error)
GetDatabaseConfig returns the configuration for a specific database
func (*Manager) GetDatabaseType ¶ added in v1.6.2
GetDatabaseType returns the type of a database by its ID
func (*Manager) IsLazyLoading ¶ added in v1.9.0
IsLazyLoading returns whether lazy loading mode is currently enabled
func (*Manager) ListDatabases ¶ added in v1.3.0
ListDatabases returns a list of all configured databases
func (*Manager) LoadConfig ¶ added in v1.3.0
LoadConfig loads database configurations from JSON
func (*Manager) SetLazyLoading ¶ added in v1.9.0
SetLazyLoading enables or disables lazy loading mode When enabled, database connections are established on first use instead of during initialization. This is recommended when managing many database connections (10+) to reduce startup time and memory usage.
type MultiDBConfig ¶ added in v1.3.0
type MultiDBConfig struct {
Connections []DatabaseConnectionConfig `json:"connections"`
}
MultiDBConfig represents the configuration for multiple database connections
type PostgresSSLMode ¶ added in v1.6.2
type PostgresSSLMode string
PostgresSSLMode defines the SSL mode for PostgreSQL connections
const ( SSLDisable PostgresSSLMode = "disable" SSLRequire PostgresSSLMode = "require" SSLVerifyCA PostgresSSLMode = "verify-ca" SSLVerifyFull PostgresSSLMode = "verify-full" SSLPrefer PostgresSSLMode = "prefer" )
SSLMode constants for PostgreSQL
type SQLiteJournalMode ¶ added in v1.9.0
type SQLiteJournalMode string
SQLiteJournalMode defines the journal mode for SQLite connections
const ( JournalDelete SQLiteJournalMode = "DELETE" JournalTruncate SQLiteJournalMode = "TRUNCATE" JournalPersist SQLiteJournalMode = "PERSIST" JournalWAL SQLiteJournalMode = "WAL" JournalOff SQLiteJournalMode = "OFF" )
SQLiteJournalMode constants