From e079490144a1fa4003035d04303df3559b70f082 Mon Sep 17 00:00:00 2001 From: MHSanaei Date: Sat, 20 Jun 2026 01:41:00 +0200 Subject: [PATCH] chore(db): use DELETE journal mode so sqlite stays a single file Switch sqlite from WAL to DELETE journal mode so the database no longer keeps -shm/-wal sidecar files; only x-ui.db remains at rest. Pair with synchronous=FULL for crash-safe durability in rollback-journal mode. The startup PRAGMA journal_mode=DELETE converts existing WAL databases and removes their leftover sidecar files on first run, so upgrades need no manual cleanup. busy_timeout and _txlock=immediate are unchanged. --- internal/database/db.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/internal/database/db.go b/internal/database/db.go index 090a435cc..f249cbd88 100644 --- a/internal/database/db.go +++ b/internal/database/db.go @@ -886,7 +886,7 @@ func InitDB(dbPath string) error { if err = os.MkdirAll(dir, 0755); err != nil { return err } - dsn := dbPath + "?_journal_mode=WAL&_busy_timeout=10000&_synchronous=NORMAL&_txlock=immediate" + dsn := dbPath + "?_journal_mode=DELETE&_busy_timeout=10000&_synchronous=FULL&_txlock=immediate" db, err = gorm.Open(sqlite.Open(dsn), c) if err != nil { return err @@ -895,13 +895,13 @@ func InitDB(dbPath string) error { if err != nil { return err } - if _, err := sqlDB.Exec("PRAGMA journal_mode=WAL"); err != nil { + if _, err := sqlDB.Exec("PRAGMA journal_mode=DELETE"); err != nil { return err } if _, err := sqlDB.Exec("PRAGMA busy_timeout=10000"); err != nil { return err } - if _, err := sqlDB.Exec("PRAGMA synchronous=NORMAL"); err != nil { + if _, err := sqlDB.Exec("PRAGMA synchronous=FULL"); err != nil { return err } }