diff --git a/templates/project/providers/postgres/postgres.go.tpl b/templates/project/providers/postgres/postgres.go.tpl index 2446177..e7e6ad6 100644 --- a/templates/project/providers/postgres/postgres.go.tpl +++ b/templates/project/providers/postgres/postgres.go.tpl @@ -1,13 +1,14 @@ package postgres import ( - "database/sql" - _ "github.com/lib/pq" - "github.com/pkg/errors" - log "github.com/sirupsen/logrus" + "github.com/sirupsen/logrus" "go.ipao.vip/atom/container" "go.ipao.vip/atom/opt" + "gorm.io/driver/postgres" + "gorm.io/gorm" + "gorm.io/gorm/logger" + "gorm.io/gorm/schema" ) func Provide(opts ...opt.Option) error { @@ -17,18 +18,38 @@ func Provide(opts ...opt.Option) error { return err } - return container.Container.Provide(func() (*sql.DB, *Config, error) { - log.Debugf("connect postgres with dsn: '%s'", conf.DSN()) - db, err := sql.Open("postgres", conf.DSN()) - if err != nil { - return nil, nil, errors.Wrap(err, "connect database") + return container.Container.Provide(func() (*gorm.DB, *Config, error) { + dbConfig := postgres.Config{ + DSN: conf.DSN(), // DSN data source name + } + logrus.Info("Open PostgreSQL:", conf.DSN()) + + gormConfig := gorm.Config{ + NamingStrategy: schema.NamingStrategy{ + TablePrefix: conf.Prefix, + SingularTable: conf.Singular, + }, + DisableForeignKeyConstraintWhenMigrating: true, + Logger: logger.New(logrus.StandardLogger(), logger.Config{ + SlowThreshold: 200, // 慢 SQL 阈值 + LogLevel: logger.Info, + IgnoreRecordNotFoundError: true, // 忽略ErrRecordNotFound(记录未找到)错误 + Colorful: false, + }), } - if err := db.Ping(); err != nil { - db.Close() - return nil, nil, errors.Wrap(err, "ping database") + db, err := gorm.Open(postgres.New(dbConfig), &gormConfig) + if err != nil { + return nil, nil, err } + sqlDB, err := db.DB() + if err != nil { + return nil, nil, err + } + sqlDB.SetMaxIdleConns(conf.MaxIdleConns) + sqlDB.SetMaxOpenConns(conf.MaxOpenConns) + return db, &conf, err }, o.DiOptions()...) }