Things-Kit SQLC
Database Connection Pool for Things-Kit
Lifecycle-managed database connection pool with automatic migration support.
Installation
go get github.com/things-kit/things-kit-sqlc
Features
- Automatic database connection lifecycle management
- Connection pool configuration
- Integration with sqlc for type-safe SQL
- Startup functions for migrations
- Graceful connection and shutdown
Quick Start
package main
import (
"database/sql"
"github.com/things-kit/things-kit/app"
"github.com/things-kit/things-kit/logging"
"github.com/things-kit/things-kit/viperconfig"
"github.com/things-kit/things-kit-sqlc"
)
func main() {
app.New(
viperconfig.Module,
logging.Module,
sqlc.Module,
fx.Invoke(UseDatabase),
).Run()
}
func UseDatabase(db *sql.DB) {
// Use the database connection
var count int
db.QueryRow("SELECT COUNT(*) FROM users").Scan(&count)
}
Configuration
Via config.yaml:
db:
dsn: "postgres://user:password@localhost:5432/mydb?sslmode=disable"
max_open_conns: 25
max_idle_conns: 5
conn_max_lifetime: 5m
Or environment variable:
export DB_DSN="postgres://user:password@localhost:5432/mydb?sslmode=disable"
With Migrations
Run migrations at startup:
func RunMigrations(ctx context.Context, db *sql.DB, logger log.Logger) error {
logger.InfoC(ctx, "Running migrations...")
// Your migration logic
return nil
}
app.New(
viperconfig.Module,
logging.Module,
sqlc.Module,
app.AsStartupFunc(RunMigrations), // Runs before server starts
).Run()
With SQLC
Use with sqlc for type-safe SQL:
import "your/package/db" // generated by sqlc
func NewQueries(database *sql.DB) *db.Queries {
return db.New(database)
}
app.New(
viperconfig.Module,
logging.Module,
sqlc.Module,
fx.Provide(NewQueries),
fx.Invoke(UseQueries),
).Run()
func UseQueries(q *db.Queries) {
users, err := q.ListUsers(ctx)
}
License
MIT License - see LICENSE file for details