跳转到主要内容

数据库迁移

按版本区间生成 SQL 迁移脚本

按版本区间生成 imqi1-cms 的 PostgreSQL schema 迁移脚本。注意,只覆盖 PostgreSQL。仓库 MySQL 中间状态全部在 v1.0.0 之前、未对外发布。

使用

  1. 选「起点」与「目标」版本;起点可选「空白数据库」从第一个 release 起步。
  2. 工具按区间顺序或逆序拼接中间步骤,每段 SQL 头部带「这一步对应的 commit / release」说明。
  3. 点「复制全文」粘到 psql / pgadmin 执行;执行前先备份(pg_dump -Fc dbname > backup.dump)。

下方工具可即时生成迁移 SQL。

加载迁移工具中…

已知限制

  • 区间拼接假设线性顺序升级;分叉或合并 schema(本仓库历史未发生)不支持。
  • 降级 SQL 不重新生成。工具会按逆序拼接,但步骤内 SQL 都是「升级向」的,可能不可逆。降级前必须 pg_dump 全量备份 + 验证。
  • pg_trgm 扩展需数据库属主有 CREATE EXTENSION 权限(PostgreSQL 13+ 为 trusted 扩展,多数情况下应用账号即可);无权限时先以超级用户执行 CREATE EXTENSION pg_trgm;。pg_trgm 索引在 init-db.sql 第五节(由 affb8c1 MySQL→PG 切换时引入),空白路径跑 init 即可拿到;中间升级路径不会重复执行该段。
  • MySQL 历史不收录:v1.0.0 之前的 MySQL 中间状态全部是私有演化、未对外发布,对升级路径无意义。如确需从 MySQL 仓库迁移,请按 affb8c1 提交(feat(server): 数据库 MySQL → PostgreSQL 迁移及数据接口适配)逐项对照。

Schema 改动历史(v1.0.0 至今)

按时间顺序列出所有触碰 prisma/schema.prisma / scripts/init-db.sql / 索引 / informations 表种子的 commit。每个变更点都对应一段可执行 SQL。

节点类型release / commit变更功能
v1.0.0releasev1.0.0首次开源发布。建 16 张表(attachments/changelogs/comments/contentattachments/contentrelations/contents/contenttravels/informations/links/metas/sessions/subscribeposts/subscribes/travels/trusted_devices/users)+ 默认设置 + admin 种子。DDL 单一来源:scripts/init-db.sql
v1.0.0 → v1.1.36 个 releasev1.0.1、v1.0.2、v1.1.0、v1.1.1、v1.1.2、v1.1.3均无 schema / 种子变更
v1.1.3commitc299ba6chore(db):清空示例默认值 —— informations 表中 siteName / siteUrl / siteDesc / homeCustomText / photoCategorySlug 的 value 置 '',后台可由站主重新填写
v1.1.3 → v1.1.4commitec10f48补回 VARCHAR(191):从 MySQL 迁到 PostgreSQL(affb8c1)时只把 @db.LongText 改为 @db.Text,导致 Prisma 把裸 String 默认长度丢失;按 schema 逐列比对,把 26 列补回 @db.VarChar(191),schema 与 init-db.sql 同步。迁移后新增的列保持 TEXT
v1.1.4commitad1ea60refactor(settings):删 baiduAppId 种子行 —— 该字段只出现在后台输入框、API 与类型定义里,文本审核走 access_token 用不到 AppID,从 informations 种子行一并删净
v1.1.4 → v1.2.0commit907106efeat!: v1.2.0 全量功能迭代 —— likes 表(每访客对每篇文章只能点一次,cid + fingerprint 复合唯一)+ contents.scheduled_at(定时发布:cron 扫描 scheduled_at≤now 且 status=0 的行置 1)+ Contents_status_scheduled_at_idx 复合索引。pg_trgm GIN 索引 在更早的 affb8c1(MySQL→PG 切换)就已写进 init-db.sql 第五节,不是本条新增
v1.2.0 之后commit2fc0994feat(admin):邮件通知细分为 notifyError / notifyComment / notifyLinkApply 三个子开关,读取以 informations 行为准、缺行视为关 —— 种子行由迁移工具对应节点补齐,不执行则评论与友链通知停发