Wiseflow数据库迁移工具:使用Flyway管理数据库版本

Wiseflow数据库迁移工具:使用Flyway管理数据库版本

【免费下载链接】wiseflow Wiseflow is an agile information mining tool that extracts concise messages from various sources such as websites, WeChat official accounts, social platforms, etc. It automatically categorizes and uploads them to the database. 【免费下载链接】wiseflow 项目地址: https://gitcode.com/gh_mirrors/wi/wiseflow

数据库版本管理是确保数据结构变更可追溯、可回滚的关键环节。Wiseflow项目通过PocketBase的迁移系统实现了类似Flyway的版本控制能力,本文将详细介绍如何使用这一机制管理数据库架构变更。

迁移文件结构与命名规范

Wiseflow的数据库迁移文件集中存储在pb/pb_migrations/目录下,采用"时间戳+操作描述"的命名格式,例如:

这种命名方式确保了迁移的执行顺序,时间戳由系统自动生成,保证了全局唯一性。

迁移文件基本结构

每个迁移文件包含两个主要函数:升级函数和降级函数,以下是典型结构:

/// <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的内置迁移系统,执行流程如下:

  1. 系统启动时自动检查pb/pb_migrations/目录
  2. 对比已执行迁移记录与文件系统中的迁移文件
  3. 按时间戳顺序执行未执行的迁移文件
  4. 将执行结果记录到数据库迁移历史表

迁移最佳实践

1. 保持迁移原子性

每个迁移文件应只包含一个逻辑变更,例如创建一个集合或添加一个字段。这样可以确保迁移的可追溯性和可回滚性。

2. 编写完整的降级逻辑

虽然在生产环境中很少执行降级操作,但完整的降级逻辑是确保数据安全的重要保障。如1748997648_created_focus_points.js所示,降级函数应准确回滚升级函数的所有变更。

3. 版本控制与协作

迁移文件应纳入版本控制,团队协作时需注意:

  • 避免同时修改同一集合
  • 定期从主分支同步最新迁移文件
  • 必要时通过沟通协调迁移顺序

4. 测试迁移

在应用到生产环境前,应在测试环境中验证迁移效果,可使用以下命令:

# 启动PocketBase并执行迁移
./pocketbase serve --dir pb

迁移系统与Flyway的对比

特性Wiseflow迁移系统Flyway
文件格式JavaScriptSQL/Java
执行引擎PocketBase内置独立Java程序
版本标识时间戳版本号
回滚支持显式编写降级函数社区版有限支持
集成方式与PocketBase深度集成支持多语言集成

Wiseflow的迁移系统虽然没有Flyway功能全面,但与PocketBase后端深度集成,更适合项目的轻量级数据管理需求。

迁移工具使用文档

完整的迁移工具使用说明可参考:

通过遵循这些规范和最佳实践,您可以有效地管理Wiseflow项目的数据库结构变更,确保系统的稳定性和可维护性。

【免费下载链接】wiseflow Wiseflow is an agile information mining tool that extracts concise messages from various sources such as websites, WeChat official accounts, social platforms, etc. It automatically categorizes and uploads them to the database. 【免费下载链接】wiseflow 项目地址: https://gitcode.com/gh_mirrors/wi/wiseflow

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值