关于 grdb
面向使用 GRDB.swift 的 Swift 开发者的参考技能。它围绕直接访问 SQLite,介绍数据库设置、查询、迁移、响应式观察与性能检查。
主要功能
- 01设置 DatabaseQueue 或 DatabasePool
- 02编写 SQL 与 QueryInterface 查询
- 03定义数据库迁移
- 04响应式观察查询结果
- 05分析查询与索引性能
适用场景
- 01在 Swift 应用中组织 SQLite 数据库
- 02通过迁移演进数据库架构
- 03根据查询变化更新 SwiftUI 视图
- 04优化前检查查询计划
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ johnrogers/ claude-swift-engineering --skill grdb安装后在 Claude Code 中输入/grdb确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
references/getting-started.mdmigrations.mdperformance.mdqueries.mdvalue-observation.md详细介绍
GRDB
使用 GRDB.swift 直接访问 SQLite——这是一个类型安全的 Swift 封装,在需要时可充分发挥 SQLite 的全部功能。
参考资料加载指南
只要有一点可能用到相关内容,就务必加载参考文件。 有上下文总比遗漏模式或犯错好。
| 参考资料 | 加载时机 |
|---|---|
| 入门指南 | 设置 DatabaseQueue 或 DatabasePool |
| 查询 | 编写原始 SQL、Record 类型、类型安全查询 |
| 值观察 | 响应式查询、SwiftUI 集成 |
| 迁移 | DatabaseMigrator、架构演进 |
| 性能 | EXPLAIN QUERY PLAN、索引、性能分析 |
何时使用 GRDB 与 SQLiteData
| 场景 | 使用 |
|---|---|
| 类型安全的 @Table 模型 | SQLiteData |
| 需要 CloudKit 同步 | SQLiteData |
| 复杂联接(4 张以上表) | GRDB |
| 窗口函数(ROW_NUMBER、RANK) | GRDB |
| 对性能要求严格的原始 SQL | GRDB |
| 响应式查询(ValueObservation) | GRDB |
核心工作流
- 选择 DatabaseQueue(单连接)或 DatabasePool(并发读取)
- 使用 DatabaseMigrator 定义迁移
- 创建 Record 类型(Codable、FetchableRecord、PersistableRecord)
- 使用原始 SQL 或 QueryInterface 编写查询
- 使用 ValueObservation 实现响应式更新
要求
- iOS 13+、macOS 10.15+
- Swift 5.7+
- GRDB.swift 6.0+
常见错误
-
未使用 EXPLAIN PLAN 就假设性能 — 不检查
EXPLAIN QUERY PLAN就假设查询速度快或慢,只是在猜测。优化前务必使用 EXPLAIN 分析查询性能。 -
WHERE 子句缺少索引 — 对未建立索引的列进行筛选时,查询会扫描整张表。对于大型表,WHERE、JOIN 或 ORDER BY 子句中使用的列都应建立索引。
-
迁移顺序不当 — 乱序运行迁移或跳过中间版本会破坏架构一致性。务必按顺序依次应用迁移,切勿跳过版本。
-
Record 遵循协议时走捷径 — Record 类型未正确遵循
PersistableRecord或FetchableRecord,会导致数据悄然丢失或反序列化失败。务必正确实现所有必需的协议。 -
ValueObservation 未妥善清理 — 视图消失时忘记取消 ValueObservation,会导致内存泄漏和过期的数据订阅。请保存可取消对象,并在 deinit 中清理。
评论
支持 Markdown