数据库迁移
按版本区间生成 SQL 迁移脚本
按版本区间生成 imqi1-cms 的 PostgreSQL schema 迁移脚本。注意,只覆盖 PostgreSQL。仓库 MySQL 中间状态全部在 v1.0.0 之前、未对外发布。
使用
- 选「起点」与「目标」版本;起点可选「空白数据库」从第一个 release 起步。
- 工具按区间顺序或逆序拼接中间步骤,每段 SQL 头部带「这一步对应的 commit / release」说明。
- 点「复制全文」粘到 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第五节(由affb8c1MySQL→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.0 | release | v1.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.3 | 6 个 release | v1.0.1、v1.0.2、v1.1.0、v1.1.1、v1.1.2、v1.1.3 | 均无 schema / 种子变更 |
| v1.1.3 | commit | c299ba6 | chore(db):清空示例默认值 —— informations 表中 siteName / siteUrl / siteDesc / homeCustomText / photoCategorySlug 的 value 置 '',后台可由站主重新填写 |
| v1.1.3 → v1.1.4 | commit | ec10f48 | 补回 VARCHAR(191):从 MySQL 迁到 PostgreSQL(affb8c1)时只把 @db.LongText 改为 @db.Text,导致 Prisma 把裸 String 默认长度丢失;按 schema 逐列比对,把 26 列补回 @db.VarChar(191),schema 与 init-db.sql 同步。迁移后新增的列保持 TEXT |
| v1.1.4 | commit | ad1ea60 | refactor(settings):删 baiduAppId 种子行 —— 该字段只出现在后台输入框、API 与类型定义里,文本审核走 access_token 用不到 AppID,从 informations 种子行一并删净 |
| v1.1.4 → v1.2.0 | commit | 907106e | feat!: 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 之后 | commit | 2fc0994 | feat(admin):邮件通知细分为 notifyError / notifyComment / notifyLinkApply 三个子开关,读取以 informations 行为准、缺行视为关 —— 种子行由迁移工具对应节点补齐,不执行则评论与友链通知停发 |