# ARR 测试数据库远程迁移记录

执行日期：2026-07-28  
状态：完整迁移已提交并验收。

## 范围

- 源：`<LEGACY_DB_HOST>:5433/booking_test`，PostgreSQL 15.18
- 目标：`<ARR_DB_HOST>:5432/booking_test`，PostgreSQL 15.14
- 目标用户：`<TEST_DB_OWNER>`，数据库 owner，非超级用户
- 迁移对象：`ingestion`、`booking`、`finance`
- 源库处理：只读，未修改、未删除，继续保留作为临时回退

## 执行内容

- 应用 DDL：`database/008_arr_mvp_v1_rebuild.sql`
- DDL SHA-256：`a29df928a2bcfca262216a9d53260528374b830266b3285f3687199cb802a530`
- 基础表：14
- 视图：8
- 同步所有 identity sequence 的 `last_value/is_called`
- 迁移全部现有测试数据、处理审计和工件元数据

## 迁移前备份

- 目录：`<PRIVATE_BACKUP_ROOT>/booking_test_pre_remote_migration_20260728T180747+0800`
- manifest SHA-256：`db8ca84fed52123d10151b475aca31659be237c6e7d513484e4f25b1d9a89c4d`
- 备份权限：目录 0700，文件 0600
- 内容：14 表逐行 gzip JSON、schema/约束/索引/视图/函数/触发器/sequence 元数据、目标空库证据

## 安全执行

1. 只读确认目标 ARR schema 为空，用户为数据库 owner 且具备 CREATE。
2. 在目标执行一次完整 DDL + 全量复制 + 校验 + 强制 ROLLBACK 演练。
3. 第二连接确认演练后目标仍为空。
4. 正式执行相同流程，结构与数据在一个 SERIALIZABLE 事务内提交。
5. 任一步失败都会回滚；未发生部分提交。

## 最终一致性

- 双端结构 signature：`0d64002b919d439dbbbbf78d1f5c5fab86d8f815f80dc6225f17a91ab5455e38`
- 双端 14 表内容 hash bundle：`42faf898d67b3015e85baf00bbd66a1fa4448d80daa7f5d9d0207a4004fad35c`
- 双端逐表行数和逐表内容 SHA-256：全部一致
- identity sequence state：全部一致
- 未验证约束：0
- 目标 `public` 用户对象：0

关键数据计数：

| 表 | 行数 |
|---|---:|
| `booking.source_rows` | 867 |
| `booking.parse_versions` | 867 |
| `booking.room_items` | 867 |
| `booking.current_row_parses` | 867 |
| `finance.daily_versions` | 1 |
| `finance.current_daily_versions` | 1 |
| `finance.daily_records` | 3 |
| `ingestion.artifacts` | 5 |
| `ingestion.processing_runs` | 2 |

Finance outcome：retained、duplicate、excluded_rate_code 各 1。

## 应用验收

使用新远程数据库实际运行：

- 渠道 BI：1 个渠道、1 条 retained；
- 渠道明细：1 行；
- 月报生成源：1 行；
- 公司报表：1 行，Booking Room 为 `【DBL】1`；
- Web 日报列表：1 条；
- Web 月度数据源投影：1 行。

## 当前配置

- 当前测试库配置：`/path/to/private/booking-test-db.env`（0600）
- 旧 LAN 回退配置：`/path/to/private/booking-test-lan-db.env`（0600）

文档不保存密码。应用应优先使用新远程配置；在观察期结束前不要删除旧 LAN 库。
