12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879 |
- package admin
- import (
- "os"
- "strings"
- "gorm.io/driver/postgres"
- "gorm.io/driver/sqlite"
- "gorm.io/gorm"
- "gorm.io/gorm/logger"
- )
- var IsSqlite bool // 是否为Sqlite数据库
- func ConnectDB() (db *gorm.DB) {
- var err error
- // Ease 修改
- // 自动判断是否为sqlite3数据库: 以.db结尾,则为sqlite3数据库连接; 否则为postgresql数据库
- dbConnStr := os.Getenv("DB_PARAMS")
- if strings.HasSuffix(dbConnStr, ".db") {
- IsSqlite = true
- db, err = gorm.Open(sqlite.Open("test.db"), &gorm.Config{
- DisableForeignKeyConstraintWhenMigrating: true, // 禁止gorm自动建立外键约束
- SkipDefaultTransaction: true, // 跳过默认事务
- })
- db.Exec("PRAGMA journal_mode = OFF;") // 设置数据库的日志模式: WAL/
- db.Exec("PRAGMA synchronous = OFF;") // 关闭写同步
- db.Exec("PRAGMA cache_size = 8000;") // 缓存大小(数据库文件页数): 1000000为页面缓存分配最大4GB的RAM
- db.Exec("PRAGMA temp_store = MEMORY;") // 临时存储放到内存中(临时表和索引会存储在内存中)
- // PRAGMA max_page_count 设置数据库文件最大的页数
- // PRAGMA page_size 数据库的页面大小
- sqlDB, err := db.DB()
- if err != nil {
- panic(err)
- }
- sqlDB.SetMaxIdleConns(10) // 设置空闲连接池中连接的最大数量
- sqlDB.SetMaxOpenConns(100) // 设置打开数据库连接的最大数量
- } else {
- db, err = gorm.Open(postgres.Open(dbConnStr)) // 通过环境变量连接数据库
- }
- if err != nil {
- panic(err)
- }
- db.Logger = db.Logger.LogMode(logger.Info)
- return
- }
- func initWebsiteData(db *gorm.DB) {
- var cnt int64
- if err := db.Table("page_builder_pages").Count(&cnt).Error; err != nil {
- panic(err)
- }
- if cnt == 0 {
- if err := db.Exec(initWebsiteSQL).Error; err != nil {
- panic(err)
- }
- }
- return
- }
- func initMediaLibraryData(db *gorm.DB) {
- var cnt int64
- if err := db.Table("media_libraries").Count(&cnt).Error; err != nil {
- panic(err)
- }
- if cnt == 0 {
- if err := db.Exec(initMediaLibrarySQL).Error; err != nil {
- panic(err)
- }
- }
- return
- }
|