db.go 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. package admin
  2. import (
  3. "os"
  4. "strings"
  5. "gorm.io/driver/postgres"
  6. "gorm.io/driver/sqlite"
  7. "gorm.io/gorm"
  8. "gorm.io/gorm/logger"
  9. )
  10. var IsSqlite bool // 是否为Sqlite数据库
  11. func ConnectDB() (db *gorm.DB) {
  12. var err error
  13. // Ease 修改
  14. // 自动判断是否为sqlite3数据库: 以.db结尾,则为sqlite3数据库连接; 否则为postgresql数据库
  15. dbConnStr := os.Getenv("DB_PARAMS")
  16. if strings.HasSuffix(dbConnStr, ".db") {
  17. IsSqlite = true
  18. db, err = gorm.Open(sqlite.Open("test.db"), &gorm.Config{
  19. DisableForeignKeyConstraintWhenMigrating: true, // 禁止gorm自动建立外键约束
  20. SkipDefaultTransaction: true, // 跳过默认事务
  21. })
  22. db.Exec("PRAGMA journal_mode = OFF;") // 设置数据库的日志模式: WAL/
  23. db.Exec("PRAGMA synchronous = OFF;") // 关闭写同步
  24. db.Exec("PRAGMA cache_size = 8000;") // 缓存大小(数据库文件页数): 1000000为页面缓存分配最大4GB的RAM
  25. db.Exec("PRAGMA temp_store = MEMORY;") // 临时存储放到内存中(临时表和索引会存储在内存中)
  26. // PRAGMA max_page_count 设置数据库文件最大的页数
  27. // PRAGMA page_size 数据库的页面大小
  28. sqlDB, err := db.DB()
  29. if err != nil {
  30. panic(err)
  31. }
  32. sqlDB.SetMaxIdleConns(10) // 设置空闲连接池中连接的最大数量
  33. sqlDB.SetMaxOpenConns(100) // 设置打开数据库连接的最大数量
  34. } else {
  35. db, err = gorm.Open(postgres.Open(dbConnStr)) // 通过环境变量连接数据库
  36. }
  37. if err != nil {
  38. panic(err)
  39. }
  40. db.Logger = db.Logger.LogMode(logger.Info)
  41. return
  42. }
  43. func initWebsiteData(db *gorm.DB) {
  44. var cnt int64
  45. if err := db.Table("page_builder_pages").Count(&cnt).Error; err != nil {
  46. panic(err)
  47. }
  48. if cnt == 0 {
  49. if err := db.Exec(initWebsiteSQL).Error; err != nil {
  50. panic(err)
  51. }
  52. }
  53. return
  54. }
  55. func initMediaLibraryData(db *gorm.DB) {
  56. var cnt int64
  57. if err := db.Table("media_libraries").Count(&cnt).Error; err != nil {
  58. panic(err)
  59. }
  60. if cnt == 0 {
  61. if err := db.Exec(initMediaLibrarySQL).Error; err != nil {
  62. panic(err)
  63. }
  64. }
  65. return
  66. }