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) }