mirror of
https://github.com/usememos/memos.git
synced 2025-10-29 07:48:14 +08:00
fix: database is locked (#1992)
* fix: database is locked The option "_journal_mode=WAL" is currently *not* being applied when provided in the DSN. This issue affects only new memos installations, not older ones where the database journal was properly set to WAL mode by the previous sqlite library go-sqlite3. modernc.org/sqlite DSN parsing is different from go-sqlite3. It requires the `_pragma=` prefix and even some options order matter. https://gitlab.com/cznic/sqlite/-/issues/115 Closes #1985 * chore: upgraded notes on sqlite DSN
This commit is contained in:
parent
f91f09adea
commit
c8961ad489
1 changed files with 15 additions and 2 deletions
|
|
@ -42,8 +42,21 @@ func (db *DB) Open(ctx context.Context) (err error) {
|
|||
return fmt.Errorf("dsn required")
|
||||
}
|
||||
|
||||
// Connect to the database without foreign_key.
|
||||
sqliteDB, err := sql.Open("sqlite", db.profile.DSN+"?cache=private&_foreign_keys=0&_busy_timeout=10000&_journal_mode=WAL")
|
||||
// Connect to the database with some sane settings:
|
||||
// - No shared-cache: it's obsolete; WAL journal mode is a better solution.
|
||||
// - No foreign key constraints: it's currently disabled by default, but it's a
|
||||
// good practice to be explicit and prevent future surprises on SQLite upgrades.
|
||||
// - Journal mode set to WAL: it's the recommended journal mode for most applications
|
||||
// as it prevents locking issues.
|
||||
//
|
||||
// Notes:
|
||||
// - When using the `modernc.org/sqlite` driver, each pragma must be prefixed with `_pragma=`.
|
||||
//
|
||||
// References:
|
||||
// - https://pkg.go.dev/modernc.org/sqlite#Driver.Open
|
||||
// - https://www.sqlite.org/sharedcache.html
|
||||
// - https://www.sqlite.org/pragma.html
|
||||
sqliteDB, err := sql.Open("sqlite", db.profile.DSN+"?_pragma=foreign_keys(0)&_pragma=busy_timeout(10000)&_pragma=journal_mode(WAL)")
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to open db with dsn: %s, err: %w", db.profile.DSN, err)
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue