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表(若不存在)。 - run_
inner 🔒 - 在已持有咨询锁的连接上执行迁移主体逻辑。
- run_
on_ conn - 在已获取的连接上执行迁移主体逻辑(咨询锁 + 建表 + 应用迁移 + 解锁)。