71 lines
2.0 KiB
Go
71 lines
2.0 KiB
Go
package data
|
||
|
||
import (
|
||
"fmt"
|
||
c "git.inspur.com/sbg-jszt/cfn/cfn-schedule/config"
|
||
"git.inspur.com/sbg-jszt/cfn/cfn-schedule/pkg/log"
|
||
"gorm.io/driver/postgres"
|
||
"gorm.io/gorm"
|
||
"gorm.io/gorm/logger"
|
||
"gorm.io/gorm/schema"
|
||
)
|
||
|
||
var PostgreSqlDB = make(map[string]*gorm.DB)
|
||
|
||
type Writer interface {
|
||
Printf(string, ...interface{})
|
||
}
|
||
|
||
type WriterLog struct {
|
||
}
|
||
|
||
func (w WriterLog) Printf(format string, args ...interface{}) {
|
||
log.Logger.Sugar().Infof(format, args...)
|
||
}
|
||
|
||
func initPostgres() {
|
||
var err error
|
||
postgreSqlConfigMap := c.Config.DatabaseConfig.PostgreSqlConfig
|
||
if c.Config.DatabaseConfig.PostgreSqlConfig != nil && len(postgreSqlConfigMap) > 0 {
|
||
for name, postgreSqlConfig := range postgreSqlConfigMap {
|
||
var writerLog WriterLog
|
||
if postgreSqlConfig.PrintSql {
|
||
writerLog = WriterLog{}
|
||
}
|
||
logConfig := logger.New(
|
||
writerLog,
|
||
logger.Config{
|
||
SlowThreshold: 0, // 慢 SQL 阈值
|
||
LogLevel: logger.LogLevel(postgreSqlConfig.LogLevel), // 日志级别
|
||
IgnoreRecordNotFoundError: false, // 忽略ErrRecordNotFound(记录未找到)错误
|
||
Colorful: false, // 是否启用彩色打印
|
||
},
|
||
)
|
||
|
||
configs := &gorm.Config{
|
||
NamingStrategy: schema.NamingStrategy{
|
||
TablePrefix: postgreSqlConfig.TablePrefix, // 表名前缀
|
||
// SingularTable: true, // 使用单数表名
|
||
},
|
||
Logger: logConfig,
|
||
}
|
||
|
||
dsn := fmt.Sprintf("host=%s port=%d user=%s dbname=%s password=%s timezone='Asia/Shanghai'",
|
||
postgreSqlConfig.Host,
|
||
postgreSqlConfig.Port,
|
||
postgreSqlConfig.Username,
|
||
postgreSqlConfig.Database,
|
||
postgreSqlConfig.Password,
|
||
)
|
||
|
||
log.Infof("postgres客户端初始化, 配置: %s", dsn)
|
||
PostgreSqlDB[name], err = gorm.Open(postgres.Open(dsn), configs)
|
||
|
||
if err != nil {
|
||
panic("postgres connection failed:" + err.Error())
|
||
}
|
||
}
|
||
}
|
||
|
||
}
|