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