fix(migrate): 多语句迁移里不能写 CONCURRENTLY —— 解测试服部署卡死

现象:测试服 deploy 挂在 migrate 步,pac-service 起不来,任何人往测试服部署
都会挂在同一处(跟部署内容无关)。

  ERROR: CREATE INDEX CONCURRENTLY cannot run inside a transaction block (25001)

根因是我在 20260728020000 里写了 14 条 CREATE INDEX CONCURRENTLY。
Prisma 把整份 migration.sql 用**一次 simple query** 发给 Postgres,而 Postgres 只对
「一个查询串里多条语句」隐式开事务块 —— 分界线是**语句条数,不是 Prisma 版本**:

  20260701060607 / 20260727070000 / 20260727110000  各 1 条语句 → 无隐式事务 → 跑得通
  20260728020000                                    14 条语句   → 隐式事务   → 必挂

而 20260727070000 里那句「Prisma 6.19 已不成立(指事务包裹)」是**错的归因** ——
单条语句侥幸跑通被总结成了「新版没有事务包裹」,我照抄进 20260728020000,于是踩爆。

失败后果比失败本身更重:_prisma_migrations 留下一条 finished_at / rolled_back_at 全空、
applied_steps_count=0 的记录,Prisma 从此拒绝执行**任何**后续迁移(P3018),
整条部署流水线被堵死。同一颗雷已随 6333137a 合进 main,生产下次部署会撞一模一样的错。

改动:
- 20260728020000:14 条改为**普通** CREATE INDEX IF NOT EXISTS(可在事务里跑)。
  大表环境靠「部署前手工 CONCURRENTLY 先建」保证不锁表(两台机器 2026-07-28 已建完,
  故本迁移在两台上都是 IF NOT EXISTS 空跑);从零建库时表为空,普通 CREATE INDEX 瞬间完成。
  文件头补上完整复盘,明写"别再改回 CONCURRENTLY"。
- 20260727070000 / 20260727110000:订正那两处错误归因,改成"因为本文件只有 1 条语句"。

验证:
- 把修好的整份文件用 `psql -1 -v ON_ERROR_STOP=1`(显式单事务,正是 Prisma 那种场景)
  在测试服跑通,14 条全 skip,无 25001。
- 测试服已 `prisma migrate resolve --rolled-back 20260728020000_...` 解除 P3018 阻塞,
  14 条索引仍在(pg_indexes 计数 14),库结构未被破坏。

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

Found errors in your .gitlab-ci.yml:

  • jobs:openapi-drift config contains unknown keys: rules
You can also test your .gitlab-ci.yml in the Lint
Status Job ID Name Coverage