Wiseflow数据库迁移工具:使用Flyway管理数据库版本
数据库版本管理是确保数据结构变更可追溯、可回滚的关键环节。Wiseflow项目通过PocketBase的迁移系统实现了类似Flyway的版本控制能力,本文将详细介绍如何使用这一机制管理数据库架构变更。
迁移文件结构与命名规范
Wiseflow的数据库迁移文件集中存储在pb/pb_migrations/目录下,采用"时间戳+操作描述"的命名格式,例如:
- 1748997281_created_sources.js:创建sources集合
- 1748997648_created_focus_points.js:创建focus_points集合
- 1748998279_created_ks_cache.js:创建ks_cache集合
这种命名方式确保了迁移的执行顺序,时间戳由系统自动生成,保证了全局唯一性。
迁移文件基本结构
每个迁移文件包含两个主要函数:升级函数和降级函数,以下是典型结构:
/// <reference path="../pb_data/types.d.ts" />
migrate((app) => {
// 升级逻辑:创建或修改数据库结构
const collection = new Collection({
"createRule": null,
"deleteRule": null,
"fields": [
// 字段定义
],
"id": "pbc_1124997656",
"name": "sources",
// 其他集合属性
});
return app.save(collection);
}, (app) => {
// 降级逻辑:回滚数据库结构变更
const collection = app.findCollectionByNameOrId("pbc_1124997656");
return app.delete(collection);
})
创建新集合的迁移示例
以创建sources集合为例,迁移文件1748997281_created_sources.js定义了完整的数据结构:
const collection = new Collection({
"createRule": null,
"deleteRule": null,
"fields": [
{
"autogeneratePattern": "[a-z0-9]{15}",
"hidden": false,
"id": "text3208210256",
"max": 15,
"min": 15,
"name": "id",
"pattern": "^[a-z0-9]+$",
"primaryKey": true,
"required": true,
"type": "text"
},
{
"hidden": false,
"id": "select1542800728",
"maxSelect": 1,
"name": "field",
"presentable": true,
"required": false,
"type": "select",
"values": ["web", "rss", "ks", "wb", "mp"]
}
// 更多字段定义...
],
"id": "pbc_1124997656",
"name": "sources",
"type": "base"
});
这个迁移创建了一个包含id、field、creators和url字段的sources集合,用于存储信息来源数据。
修改集合结构的迁移示例
当需要修改现有集合结构时,可创建新的迁移文件。例如1748998729_updated_sources.js对sources集合进行了更新:
migrate((app) => {
const collection = app.findCollectionByNameOrId("pbc_1124997656");
// 修改现有字段
collection.fields.push({
"hidden": false,
"id": "new_field_id",
"name": "new_field",
"type": "text"
});
return app.save(collection);
}, (app) => {
// 降级逻辑:移除新增字段
const collection = app.findCollectionByNameOrId("pbc_1124997656");
collection.fields = collection.fields.filter(f => f.id !== "new_field_id");
return app.save(collection);
})
迁移执行流程
Wiseflow使用PocketBase的内置迁移系统,执行流程如下:
- 系统启动时自动检查pb/pb_migrations/目录
- 对比已执行迁移记录与文件系统中的迁移文件
- 按时间戳顺序执行未执行的迁移文件
- 将执行结果记录到数据库迁移历史表
迁移最佳实践
1. 保持迁移原子性
每个迁移文件应只包含一个逻辑变更,例如创建一个集合或添加一个字段。这样可以确保迁移的可追溯性和可回滚性。
2. 编写完整的降级逻辑
虽然在生产环境中很少执行降级操作,但完整的降级逻辑是确保数据安全的重要保障。如1748997648_created_focus_points.js所示,降级函数应准确回滚升级函数的所有变更。
3. 版本控制与协作
迁移文件应纳入版本控制,团队协作时需注意:
- 避免同时修改同一集合
- 定期从主分支同步最新迁移文件
- 必要时通过沟通协调迁移顺序
4. 测试迁移
在应用到生产环境前,应在测试环境中验证迁移效果,可使用以下命令:
# 启动PocketBase并执行迁移
./pocketbase serve --dir pb
迁移系统与Flyway的对比
| 特性 | Wiseflow迁移系统 | Flyway |
|---|---|---|
| 文件格式 | JavaScript | SQL/Java |
| 执行引擎 | PocketBase内置 | 独立Java程序 |
| 版本标识 | 时间戳 | 版本号 |
| 回滚支持 | 显式编写降级函数 | 社区版有限支持 |
| 集成方式 | 与PocketBase深度集成 | 支持多语言集成 |
Wiseflow的迁移系统虽然没有Flyway功能全面,但与PocketBase后端深度集成,更适合项目的轻量级数据管理需求。
迁移工具使用文档
完整的迁移工具使用说明可参考:
通过遵循这些规范和最佳实践,您可以有效地管理Wiseflow项目的数据库结构变更,确保系统的稳定性和可维护性。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



