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