Skip to main content

Module migrate

Module migrate 

Source
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§

MigrateError
迁移执行错误。

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
已获取的连接上执行迁移主体逻辑(咨询锁 + 建表 + 应用迁移 + 解锁)。