octopus/internal/dal/postgres.go
2023-03-22 22:45:17 +08:00

76 lines
1.8 KiB
Go

package dal
import (
slog "log"
"os"
"sync"
"time"
"octopus/internal/config"
"github.com/rs/zerolog/log"
"gorm.io/driver/postgres"
"gorm.io/driver/sqlite"
"gorm.io/gorm"
"gorm.io/gorm/logger"
)
var (
sqlOnce sync.Once
sqlInstance *gorm.DB
)
func GetpostgresTest() *gorm.DB {
l := logger.Default
l = l.LogMode(logger.Info)
db, _ := gorm.Open(sqlite.Open("file::memory:?parseTime=True&loc=Local"), &gorm.Config{Logger: l})
return db
}
func GetPostgres() *gorm.DB {
sqlOnce.Do(initPostgres)
return sqlInstance
}
func initPostgres() {
log.Info().Msg("loading postgres configs")
dsn := config.Get().Databases.PostgreSQL
db, err := gorm.Open(
postgres.Open(dsn),
&gorm.Config{
DisableForeignKeyConstraintWhenMigrating: true,
Logger: logger.New(
slog.New(os.Stdout, "\r\n", slog.LstdFlags), logger.Config{
SlowThreshold: 200 * time.Millisecond,
LogLevel: logger.Info,
IgnoreRecordNotFoundError: false,
Colorful: true,
},
),
},
)
if err != nil {
log.Fatal().Str("dsn", dsn).Err(err).Msg("connected to postgres failed")
}
sqlDB, err := db.DB()
if err != nil {
log.Fatal().Str("dsn", dsn).Err(err).Msg("connected to postgres failed")
}
// SetMaxIdleConns sets the maximum number of connections in the idle connection pool.
sqlDB.SetMaxIdleConns(50)
// SetMaxOpenConns sets the maximum number of open connections to the database.
sqlDB.SetMaxOpenConns(50)
// SetConnMaxLifetime sets the maximum amount of time a connection may be reused.
sqlDB.SetConnMaxLifetime(time.Minute * 2)
if err != nil {
log.Fatal().Str("dsn", dsn).Err(err).Msg("connected to postgres failed")
}
if config.Get().Debug {
db = db.Debug()
}
sqlInstance = db
log.Info().Msg("connected to postgres")
}