SQLite WAL: включить журнал предзаписи

Категория: Postgresql · Язык: SQL · Обновлено:

Режим WAL (write-ahead log) позволяет SQLite выполнять чтение одновременно с записью: изменения сначала попадают в журнал, а затем переносятся в основной файл при checkpoint. Это подходит для локальной базы, когда читатели не должны ждать завершения короткой записи. В WAL всё равно работает только один writer одновременно.

Переключить и проверить режим

Выполните команды для открытого файла базы данных:

SQL
PRAGMA journal_mode = WAL;
PRAGMA journal_mode;

Первая команда возвращает фактически выбранный режим; проверьте, что результат — wal. Если база не может переключиться, значение останется другим. Переключение меняет состояние базы, поэтому заранее сделайте резервную копию и не запускайте пример на production без согласованного окна.

WAL создаёт дополнительные файлы -wal и -shm, пока база используется. Не копируйте только основной .db файл при открытых соединениях: для резервирования используйте SQLite Backup API или корректно закройте подключения. Все процессы должны обращаться к WAL-базе с одного компьютера; сетевые файловые системы для этого режима не подходят.

Официальная документация: Write-Ahead Logging.