lawless/server/internal/db/db.go

48 行
981 B
Go

// Package db 封装 PostgreSQL 连接池与基础查询辅助函数。
package db
import (
"context"
"fmt"
"os"
"github.com/jackc/pgx/v5/pgxpool"
)
// Pool 全局连接池,由 main.go 初始化。
var Pool *pgxpool.Pool
// Init 解析 DATABASE_URL 并创建连接池。
func Init(ctx context.Context) error {
dsn := os.Getenv("DATABASE_URL")
if dsn == "" {
dsn = "postgres://postgres:postgres@127.0.0.1:5432/honghuang?sslmode=disable"
}
cfg, err := pgxpool.ParseConfig(dsn)
if err != nil {
return fmt.Errorf("parse database url failed: %w", err)
}
// 生产环境建议根据实例规格调整
cfg.MaxConns = 32
cfg.MinConns = 4
pool, err := pgxpool.NewWithConfig(ctx, cfg)
if err != nil {
return fmt.Errorf("create db pool failed: %w", err)
}
if err := pool.Ping(ctx); err != nil {
return fmt.Errorf("ping database failed: %w", err)
}
Pool = pool
return nil
}
// Close 关闭连接池。
func Close() {
if Pool != nil {
Pool.Close()
}
}