48 行
981 B
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()
|
|
}
|
|
}
|