Hacker News Digest

29 августа 2025 г. в 17:30 • agwa.name • ⭐ 132 • 💬 51

OriginalHN

#sqlite#durability#journal-mode#fsync#wal#database#pragmas

SQLite's documentation about its durability properties is unclear

SQLite и надёжность: бардак в настройках

Надёжность (durability) — гарантия, что после COMMIT изменения сохранятся даже при падении ОС или отключении питания. На Linux это обеспечивается вызовом fsync. Цена — производительность, поэтому СУБД дают «ручки» для настройки. Главное, чтобы документация чётко объясняла, что включено по умолчанию.

У SQLite всё запутано. Два ключевых параметра:

  • journal_mode (DELETE | WAL …)
  • synchronous (EXTRA, FULL, NORMAL, OFF)

По документации:

  • По умолчанию journal_mode=DELETE, synchronous=FULL.
  • В режиме DELETE FULL не гарантирует надёжность; нужен EXTRA.
  • В режиме WAL FULL уже достаточно.

Вывод: «из коробки» SQLite не надёжна; переключившись на WAL — становится.

Однако Ричард Хипп (автор SQLite) в комментарии на HN утверждает прямо противоположное:

  • «В конфигурации по умолчанию SQLite надёжна».
  • «Если включить WAL, по умолчанию надёжность теряется».

Документация и автор расходятся.

Дополнительные ловушки:

  • Обертки могут переопределять synchronous. Популярный драйвер Go для SQLite ставит NORMAL в WAL-режиме — надёжности нет.
  • На macOS fsync работает не как на Linux, что тоже снижает гарантии.

Итого: чтобы быть уверенным, явно задайте
PRAGMA journal_mode = WAL; PRAGMA synchronous = FULL;