Files
codex-proxy-rs/backend/migrations
ZyyandCodex 1280c437b4 fix(settings): raise initial account concurrency to five
Set the database default and untouched initial settings to five in the
unreleased 0032 migration, preserving saved concurrency settings.
Update the migration checksum and document the initial value.

Co-authored-by: Codex <noreply@openai.com>
2026-10-16 16:59:33 +08:00
..

数据库迁移

sqlx 在服务启动、监听请求之前按编号执行迁移,并把文件 checksum 记入 _sqlx_migrations。 已应用迁移的字节与记录不一致时,服务会拒绝启动

迁移按递增编号组织,完整清单以本目录 SQL 文件和 .frozen-sha256 为准

命名约定

  • 表名使用小写 snake_case,实体集合使用复数,配置与单例状态使用自然语义,如 runtime_settings、request_analytics_build_state
  • 业务归属使用领域前缀,同一实体统一使用 client_api_key、account_group、provider 等术语,不添加 tbl_ 等对象类型前缀
  • 统计时间粒度使用 15m、1h、1d;只保存计数的表保留 _counts 后缀
  • 表名调整时同步查询、函数体及所属索引和约束名称,已冻结迁移仍保持原样

冻结规则

  • 同一大版本内,已合入 main 的迁移文件按字节永久冻结,包括注释和空白。schema 变更及错误修正都须新增编号迁移,使用 alter 或回填补偿;修改原文件会导致已部署实例重启时 checksum 失配,且没有自动恢复路径
  • 跨大版本不支持在线升级,目标版本必须使用全新数据目录部署;此时可将已完成升级的 schema 折叠为新的初始化基线
  • 支持连续升级的预发行线从首次发布起同样冻结迁移。alpha、beta、rc 到对应正式版必须保留 已发布迁移的编号与字节;同一轮 exp 的后续发行也只能追加迁移。发布前以该发行线已发布版本 的数据库验证升级路径,不能只与上一正式版比较。不同 exp 实验线之间、exp 与正式版之间 不保证迁移历史兼容
  • .frozen-sha256 使用 sha256sum 格式。新增迁移时在同一提交执行 sha256sum 000N_xxx.sql >> .frozen-sha256 入册;CI 校验文件字节、SQL 登记完整性及 PR 中清单只增不改

从迁移目录检查已登记文件:

cd backend/migrations
sha256sum --check --strict .frozen-sha256

遇到 checksum 不一致,先核对运行版本和文件来源;不要修改数据库中的 checksum 来绕过校验

本地测试库

gateway-store 的 PG/Redis 集成测试需要以下环境变量,未设置时在本地 静默跳过(CI 缺失则直接失败):

export CPR_TEST_DATABASE_URL='postgres://<user>:<password>@127.0.0.1:5432/<db>'
export CPR_TEST_REDIS_URL='redis://:<password>@127.0.0.1:6379'

测试自建随机 schema / key 前缀做隔离,但仍应使用专用开发或测试实例,不要连接生产库。 凭据从自己的部署配置或 CI Secret 中读取,不要粘贴未脱敏的 docker inspect 输出。 环境变量未设置导致的跳过不算数据库测试通过

PostgreSQL 的临时 schema 测试连接使用异步提交,保留事务可见性、回滚和完整迁移检查 需要验证数据库崩溃后的持久性时,使用独立数据库与生产连接配置,不复用这类 fixture

运行包含 StoreBundle 初始化的完整集成测试时,两条测试 URL 都须包含密码,且密码满足 Store 启动配置的 48 位十六进制要求;仅能连接数据库并不代表该初始化合同通过。专用服务使用对应测试密码, 并在测试进程中清除 CPR_DATABASE_URL、CPR_REDIS_URL、CPR_DATABASE_PASSWORD 和 CPR_REDIS_PASSWORD,避免启动配置被部署环境覆盖