feat():learning后台管理项目初始化
This commit is contained in:
69
internal/storage/postgres.go
Normal file
69
internal/storage/postgres.go
Normal file
@@ -0,0 +1,69 @@
|
||||
package storage
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"log"
|
||||
"os"
|
||||
"time"
|
||||
|
||||
"goalfymax-admin/internal/config"
|
||||
"goalfymax-admin/pkg/utils"
|
||||
|
||||
"gorm.io/driver/postgres"
|
||||
"gorm.io/gorm"
|
||||
"gorm.io/gorm/logger"
|
||||
)
|
||||
|
||||
var PG *gorm.DB
|
||||
|
||||
// InitPostgres 初始化PostgreSQL连接
|
||||
func InitPostgres(appLogger *utils.Logger) error {
|
||||
cfg := config.GetConfig()
|
||||
pg := cfg.PostgreSQL
|
||||
// 兼容 DSN 或字段拼接
|
||||
dsn := pg.DSN
|
||||
if dsn == "" {
|
||||
ssl := pg.SSLMode
|
||||
if ssl == "" {
|
||||
ssl = "disable"
|
||||
}
|
||||
dsn = fmt.Sprintf("host=%s port=%d user=%s password=%s dbname=%s sslmode=%s TimeZone=UTC",
|
||||
pg.Host, pg.Port, pg.User, pg.Password, pg.DBName, ssl,
|
||||
)
|
||||
}
|
||||
|
||||
lw := log.New(os.Stdout, "", log.LstdFlags)
|
||||
gormLogger := logger.New(lw, logger.Config{
|
||||
SlowThreshold: 200 * time.Millisecond,
|
||||
LogLevel: logger.Info,
|
||||
IgnoreRecordNotFoundError: true,
|
||||
ParameterizedQueries: true,
|
||||
Colorful: false,
|
||||
})
|
||||
|
||||
db, err := gorm.Open(postgres.Open(dsn), &gorm.Config{Logger: gormLogger})
|
||||
if err != nil {
|
||||
return fmt.Errorf("连接PostgreSQL失败: %w", err)
|
||||
}
|
||||
sqlDB, err := db.DB()
|
||||
if err != nil {
|
||||
return fmt.Errorf("获取PostgreSQL实例失败: %w", err)
|
||||
}
|
||||
if pg.MaxOpenConns > 0 {
|
||||
sqlDB.SetMaxOpenConns(pg.MaxOpenConns)
|
||||
}
|
||||
if pg.MaxIdleConns > 0 {
|
||||
sqlDB.SetMaxIdleConns(pg.MaxIdleConns)
|
||||
}
|
||||
if pg.ConnMaxLifetime > 0 {
|
||||
sqlDB.SetConnMaxLifetime(pg.ConnMaxLifetime)
|
||||
}
|
||||
if pg.ConnMaxIdleTime > 0 {
|
||||
sqlDB.SetConnMaxIdleTime(pg.ConnMaxIdleTime)
|
||||
}
|
||||
|
||||
PG = db
|
||||
return nil
|
||||
}
|
||||
|
||||
func GetPG() *gorm.DB { return PG }
|
||||
Reference in New Issue
Block a user