SQLite 应该有(Rust 风格的)版本版次
来源:mort.coffee — 2026-07-18
SQLite 凭借其自包含、零配置的嵌入式特性成为本地数据存储的事实标准,但外键约束、类型检查、并发写入超时和 WAL 等关键默认设置却与开发者的直觉和可靠性要求相悖。
作者建议 SQLite 借鉴 Rust 的 edition 机制,通过一个 PRAGMA edition = 2026 一次性启用更安全的现代默认值,在保持向后兼容的同时让新项目和未来版本摆脱历史包袱。
核心要点
- 外键约束默认不启用,配合 ROWID 复用机制,悬空的引用可能静默指向错误的行。
- 严格表(strict tables)并非默认,普通列的“亲和类型”会允许向 INTEGER 列写入 TEXT 等非法值。
- 默认无 busy_timeout,多个写者竞争锁时会立即抛出 SQLITE_BUSY 错误,容易导致服务崩溃。
- WAL(Write-Ahead Log)默认关闭,同时 synchronous 也未采用更高效的 NORMAL 模式,严重限制写入性能。
- 作者提议引入 Rust 风格的 edition,例如
PRAGMA edition = 2026,一次性切换 foreign_keys、busy_timeout、journal_mode、synchronous 和 strict 等现代默认配置。
“There's just one huge problem though. Its defaults are all wrong.”
← 返回首页