16 Schema 迁移与新旧版本:实验卡(2026-10-04) 基础证据 foundation/migration.stdout.txt + migration-exit-code.txt 只证空库 001 脚本退出 0、三张表一个索引;没有升级脚本、版本记录表或启动闸门。读取 db-check 的 connected 也不证明建表。实验不得作用于共享 javaee_lab、jpa_lab 或生产库。 可复跑空库合同(本批 NOT_RUN):预先手工创建仅供此实验、由 javaee_lab 角色可建表的空库 javaee_lab_16,先运行 `psql -h 127.0.0.1 -U javaee_lab -d javaee_lab_16 -c 'SELECT current_database()'`,确定目标后,在仓库根目录使用如下命令: PGPASSWORD="$JAVAEE_LAB_PASSWORD" psql -X -v ON_ERROR_STOP=1 --single-transaction -h 127.0.0.1 -U javaee_lab -d javaee_lab_16 -f examples/javaee-enterprise/db/migrations/001-initial.sql PGPASSWORD="$JAVAEE_LAB_PASSWORD" psql -X -v ON_ERROR_STOP=1 -h 127.0.0.1 -U javaee_lab -d javaee_lab_16 -c 'SELECT COUNT(*) FROM purchase_request' 预期脚本退出 0、三表一索引存在、申请数为 0;保存脚本 SHA、stdout/stderr、库名、退出码和表约束。不要重跑在业务库。 故意重复执行(本批 NOT_RUN,仅对上述一次性数据库):再次运行同一个未加 IF NOT EXISTS 的 -f 脚本,预期 relation already exists 且原始命令非零退出;然后确认既有表和行没有丢失。这证明脚本不可直接重放,不证明应用版本闸门存在。 旧库升级失败/修复(NOT_RUN):未来增加版本迁移、可空字段及启动闸门以后,在旧库跳过迁移部署需要该字段的新 WAR,预期业务入口被拒;补迁移后复测旧新版 WAR 都能读写。当前没有该代码或两版 WAR,不写伪造的命令与输出。JPA 08 的 jpa_lab 数据库证据不可复用。