60 lines
1.3 KiB
Go
60 lines
1.3 KiB
Go
package initialize
|
|
|
|
import (
|
|
"fmt"
|
|
|
|
"kra/internal/conf"
|
|
|
|
"gorm.io/driver/postgres"
|
|
"gorm.io/gorm"
|
|
)
|
|
|
|
// GormPgsql 初始化PostgreSQL数据库
|
|
func GormPgsql(p *conf.Pgsql) (*gorm.DB, error) {
|
|
if p == nil || p.DbName == "" {
|
|
return nil, fmt.Errorf("pgsql config is empty")
|
|
}
|
|
return initPgsqlDatabase(p)
|
|
}
|
|
|
|
// GormPgsqlByConfig 通过传入配置初始化PostgreSQL数据库
|
|
func GormPgsqlByConfig(p *conf.Pgsql) (*gorm.DB, error) {
|
|
return initPgsqlDatabase(p)
|
|
}
|
|
|
|
// initPgsqlDatabase 初始化PostgreSQL数据库的辅助函数
|
|
func initPgsqlDatabase(p *conf.Pgsql) (*gorm.DB, error) {
|
|
if p.DbName == "" {
|
|
return nil, nil
|
|
}
|
|
|
|
dsn := PgsqlDsn(p)
|
|
pgsqlConfig := postgres.Config{
|
|
DSN: dsn,
|
|
PreferSimpleProtocol: false,
|
|
}
|
|
|
|
gormConfig := GormConfig(p.Prefix, p.Singular, p.LogMode)
|
|
|
|
db, err := gorm.Open(postgres.New(pgsqlConfig), gormConfig)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
sqlDB, err := db.DB()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
sqlDB.SetMaxIdleConns(int(p.MaxIdleConns))
|
|
sqlDB.SetMaxOpenConns(int(p.MaxOpenConns))
|
|
|
|
return db, nil
|
|
}
|
|
|
|
// PgsqlDsn 生成PostgreSQL DSN
|
|
func PgsqlDsn(p *conf.Pgsql) string {
|
|
return fmt.Sprintf("host=%s user=%s password=%s dbname=%s port=%s %s",
|
|
p.Path, p.Username, p.Password, p.DbName, p.Port, p.Config)
|
|
}
|