Expand description
数据库迁移运行器,仅在启用 server feature 时编译。 数据库迁移运行器。
在服务器启动时(dioxus::server::serve() 之前)自动执行迁移。
设计要点:
- 迁移 SQL 通过
include_str!内联进二进制,部署只需单个二进制。 schema_migrations表记录已应用版本,避免重复执行。- 每个迁移在独立事务里执行,失败自动回滚,版本行不会写入。
- 咨询锁(
pg_advisory_lock)保证多实例启动时只有一个进程执行迁移。
前置条件:目标数据库的存在性由 crate::db::pool::ensure_database 在本模块
被调用前保证(它先连 postgres 维护库做 CREATE DATABASE IF NOT EXISTS 等价逻辑)。
本模块负责 schema 与一次性存储格式迁移,不再关心“库不存在“。
仅在 feature = "server" 时编译。
Enums§
- Migrate
Error - 迁移执行错误。
Constants§
- ADVISORY_
LOCK_ 🔒KEY - 咨询锁的固定 key。Postgres 咨询锁是数据库级唯一的; 这里用一个项目专属的大整数,避免与同库其它应用冲突。 该值无语义,仅要求唯一性。
- MIGRATIONS 🔒
- 所有迁移的 (version, sql) 列表,按 version 升序排列。
Functions§
- applied_
versions 🔒 - 查询已应用的版本集合。
- apply_
one 🔒 - 在一个事务内应用单个迁移:执行 SQL + 写入版本行,失败则回滚。
- ensure_
versions_ 🔒table - 创建
schema_migrations表(若不存在)。 - is_
old_ 🔒katex_ class - KaTeX 0.18 的精确 class 改名表(上游 commit 6f5c44f,katex-rs 0.3)。
hbox的未使用 CSS 被上游删除,没有对应的旧渲染节点需要迁移。 - migrate_
katex_ 🔒classes - 仅修改公式视觉层 span 的完整 class token,保留文字、其它属性和注释。 lol_html 不重新序列化未改动的节点;无旧 class 返回 None,避免无效 UPDATE。
- migrate_
katex_ 🔒html - 一次性格式迁移:不重渲染 Markdown、不触碰原文/目录/时间戳/审核状态。 SQL 已锁住两张表,批次仅限制内存;所有批次与版本行仍属于同一事务。
- run_
inner 🔒 - 在已持有咨询锁的连接上执行迁移主体逻辑。
- run_
on_ conn - 在已获取的连接上执行迁移主体逻辑(咨询锁 + 建表 + 应用迁移 + 解锁)。