Skip to content

Commit 8400999

Browse files
committed
sqlite使用WAL模式来支持高并发和防止database is locked
1 parent 0f58101 commit 8400999

File tree

1 file changed

+8
-0
lines changed

1 file changed

+8
-0
lines changed

backend/db/db.go

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -158,6 +158,7 @@ func NewFs(ctx context.Context, name, root string, m configmap.Mapper) (fs.Fs, e
158158
dbType, _ := m.Get("db_type")
159159
var dialector gorm.Dialector
160160
if dbType == "sqlite" {
161+
dsn = fmt.Sprintf("%s?_pragma=busy_timeout(60000)&_pragma=journal_mode(WAL)", dsn)
161162
dialector = sqlite.Open(dsn)
162163
} else if dbType == "mysql" {
163164
dialector = mysql.Open(dsn)
@@ -172,6 +173,13 @@ func NewFs(ctx context.Context, name, root string, m configmap.Mapper) (fs.Fs, e
172173
}
173174
db.Config.Logger = logger.Default.LogMode(logger.Error)
174175
f.db = db
176+
// 显式启用 WAL(部分环境需二次确认)
177+
if dbType == "sqlite" {
178+
db.Exec("PRAGMA journal_mode=WAL;")
179+
}
180+
var journalMode string
181+
db.Raw("PRAGMA journal_mode;").Scan(&journalMode)
182+
fs.Debugf(f, "当前 journal 模式:"+journalMode)
175183
err = db.AutoMigrate(&FileInfo{})
176184
if err != nil {
177185
return nil, err

0 commit comments

Comments
 (0)