Files
workspace/code/allapp/allapp-go/config/database.go
T
2026-02-26 17:31:08 +08:00

51 lines
1.1 KiB
Go

package config
import (
"allapp/db/repo"
"context"
"fmt"
"time"
"github.com/jackc/pgx/v5/pgxpool"
)
func initDB() (*pgxpool.Pool, *repo.Queries, error) {
cfg := conf.Postgres
sslMode := "disable"
if cfg.SslMode {
sslMode = "require"
}
dsn := fmt.Sprintf(
"postgres://%s:%s@%s:%d/%s?sslmode=%s&TimeZone=%s",
cfg.User, cfg.Password, cfg.Host, cfg.Port, cfg.Dbname, sslMode, cfg.TimeZone,
)
ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
defer cancel()
// 使用可修改配置
cfgPool, err := pgxpool.ParseConfig(dsn)
if err != nil {
return nil, nil, fmt.Errorf("parse pgx config failed: %w", err)
}
cfgPool.MaxConns = cfg.MaxOpenConns
cfgPool.MinConns = cfg.MaxIdleConns
cfgPool.MaxConnLifetime = cfg.ConnMaxLifetime
pool, err := pgxpool.NewWithConfig(ctx, cfgPool)
if err != nil {
return nil, nil, fmt.Errorf("create pgx pool failed: %w", err)
}
// 测试连接
if err := pool.Ping(ctx); err != nil {
return nil, nil, fmt.Errorf("ping database failed: %w", err)
}
queries := repo.New(pool)
return pool, queries, nil
}