refactor(flight-state): 按 flight-state.md 审计定稿全量重构脚手架与 SQL (ACM2-31)
- SQL 基线 V1__flight_state_baseline.sql 整体取代 V1.0.0–V1.4.0: PIPELINE_LOCK/PROC_STATE/MSG_EVENT/REQ_TRACK/BACKFILL_TODO/FLIGHT_SCHD + 8 张资源明细表 + FLIGHT_ROUTE_POINT + SCHD_SNAP_LOG 留痕层 - 废除 FDAY 日代/SCHD_GEN/名单差删:OPERATION_DAY 不可变(应用层校验 + 条件更新强化 §7.4),STATE 仅 ACTIVE/DELETED,物理清除只在历史归档后 - 处理器化:applyScheduleRecords(§5.1 七步同一事务,重放判定/整包 DEAD(PROTOCOL)/归属冲突不落地)+ FLOP/FDEL/ADFT(tombstone 仅 ACTIVE→DELETED,重复 FDEL 幂等不推进版本) - 投递:KAFKA_SCHD 同 FLID 按最新 STATE_VERSION 合并,被压掉事件关闭, TOMBSTONE 发 null 值消息(键缺失=删除旧值 §7.3) - 回填待办改为业务事务内预登记,消除提交后写待办的崩溃窗口(§7.2/§10) - XML 解码改为 jackson-dataformat-xml 数据类直接映射(SIS 信封强类型, FLTR 开放标签泛型承载) - 历史归档/物理清除顺序不可颠倒:归档确认成功集才物理删除,未接通删 0 条 - 移除 PUMP_JOB 队列/ReferenceService/FlightStoreDiffTool 等旧机制与测试, 新增运营日/引擎/快照/FDEL/归档顺序不变性回归测试
This commit is contained in:
@@ -5,12 +5,11 @@
|
||||
# 口令/端点全部环境变量外置——零入库。
|
||||
# 存储边界:自有 PostgreSQL(datasources.default,全部内部状态与运营航班权威 FLIGHT_SCHD/SCHD_GEN)+
|
||||
# 共享 MySQL 信箱(mailbox.shared-mysql,仅 DML,不建表)+
|
||||
# Kafka + Eureka/logstash(见 ACM2-28 与 docs;Redis 彻底退出阶段 A 权威与写路径)。
|
||||
# Kafka + Eureka/logstash。权威设计:docs/flight-state.md。
|
||||
# 键位口径:Micronaut 5.1(U03):datasources.* / flyway.datasources.* /
|
||||
# kafka.producers.<name>.* / eureka.client.*(Micronaut 原生键)。
|
||||
# =====================================================================
|
||||
msgx:
|
||||
phase: A # 航班动态权威落自有 PG(FLIGHT_SCHD,主泵单线程写,I5;ACM2-28 定案)
|
||||
service-name: msgexchangeapi # 契约冻结;影子实例用 msgexchangeapi-shadow
|
||||
register-eureka: true # 影子对拍期置 false 或独立服务名
|
||||
pipeline: # —— ACMA-8 参数表初值(阶段 0 基线校准)——
|
||||
@@ -24,11 +23,16 @@ msgx:
|
||||
schd:
|
||||
flush-period: 3s # KEEP 现役推送节律
|
||||
flush-limit: 500 # 批上限,防积压尖峰
|
||||
identity:
|
||||
include-day-boundary: false # CONFIRM(矩阵 #11):SEQN 重置作用域确认前保持关闭
|
||||
consistency-check: # 一致性哨兵(实装属 U25)
|
||||
on-startup: true
|
||||
daily-sample-ratio: 0.01
|
||||
operation-day: # §3.5:SODT + 机场时区 + 切日边界(默认占位 0 点,待业务确认 §10)
|
||||
zone: Asia/Shanghai
|
||||
cutoff-hour: 0
|
||||
history: # §8:历史判定窗口与保留期
|
||||
cancelled-hours: 48
|
||||
terminal-hours: 48
|
||||
deleted-hours: 48
|
||||
idle-hours: 168
|
||||
snap-log-retention-days: 90
|
||||
history-store-enabled: false # 未接通历史存储时 HISTORY_SWEEP 删 0 条(§8.2)
|
||||
|
||||
micronaut:
|
||||
application:
|
||||
@@ -37,8 +41,9 @@ micronaut:
|
||||
port: 8080
|
||||
# 管理端点(U03/N32):/env、/beans 默认 sensitive;仅开发/影子环境放开——见 application-dev.yml
|
||||
|
||||
# 自有 PostgreSQL:全部内部状态(消息管道 PROC_STATE/MSG_EVENT、PUMP_JOB、REQ_TRACK、
|
||||
# 21 类 REF_MASTER、运营航班表 FLIGHT_SCHD 与 SCHD_GEN;迁移 db/migration,ACM2-28)。数据层实装前 enabled=false。
|
||||
# 自有 PostgreSQL:全部内部状态(PIPELINE_LOCK/PROC_STATE/MSG_EVENT/REQ_TRACK/BACKFILL_TODO/
|
||||
# FLIGHT_SCHD 及明细表/SCHD_SNAP_LOG;迁移 db/migration/V1__flight_state_baseline.sql)。
|
||||
# 数据层实装前 enabled=false(stub 模式不建连)。
|
||||
datasources:
|
||||
default:
|
||||
enabled: false
|
||||
|
||||
@@ -1,79 +0,0 @@
|
||||
-- =====================================================================
|
||||
-- 自有 PostgreSQL 库(唯一自有数据库)· ACM2-12 定稿口径
|
||||
-- ---------------------------------------------------------------------
|
||||
-- 存储边界(ACM2-12,取代 ACMA-8 v4「MySQL 六辅助表」口径,原 MySQL V2.0.0
|
||||
-- 六表脚本已删除,定义见 git 历史):
|
||||
-- · 自有 PG:全部内部状态 —— 消息管道(PROC_STATE / MSG_EVENT)+ 调度与请求
|
||||
-- (PUMP_JOB / REQ_TRACK)+ 21 类静态主数据(REF_MASTER)。本地事务只在此库。
|
||||
-- · 共享 MySQL(cdairport,他人系统库):仅信箱 DML —— 上游外部写 CMINMSGS;
|
||||
-- 本系统 JDBC 轮询读 + 处理回填;出站写 COUTMSGS(他人读取发送);
|
||||
-- 本系统不在此建表/schema(迁移不覆盖)。
|
||||
-- · Redis:航班动态 flightInfo + 快照 SCHD_GEN(Lua 原子,另行脚本)。
|
||||
-- · FLIGHT_STATE(阶段 B 权威):缓做,不落表(Redis 永续动态权威)。
|
||||
-- 21 类静态表 REF_MASTER 为通用 rtype/rkey 形态(SOURCE 审计;gen/SCHD_GEN
|
||||
-- 已迁 Redis,不再需要 VERSION/CAS 列)。
|
||||
-- 影子对拍:本库开独立 schema/实例;共享信箱只读水位/回放(见 ACM2-12 影响面)。
|
||||
-- =====================================================================
|
||||
|
||||
-- ① 处理伴生状态(取消息侧;与共享库 CMINMSGS 一一对应,CMINMSGS_ID 沿用其主键;
|
||||
-- 入队由 JDBC 轮询发现新信后写入,非本系统创建 CMINMSGS 原文)
|
||||
CREATE TABLE PROC_STATE (
|
||||
CMINMSGS_ID BIGINT PRIMARY KEY,
|
||||
STATE VARCHAR(16) NOT NULL, -- PENDING/FAILED/SUCCEEDED/SKIPPED/DEAD
|
||||
IDENTITY_KEY VARCHAR(200), -- SNDR|TYPE|STYP|SEQN,decode 后首次绑定(I3)
|
||||
ATTEMPTS INT NOT NULL DEFAULT 0,
|
||||
NEXT_ATTEMPT_AT TIMESTAMP,
|
||||
ERROR_CLASS VARCHAR(20), -- MALFORMED/CODEC_ERROR/EXHAUSTED/INFRA/UNSUPPORTED
|
||||
LAST_ERROR VARCHAR(1000),
|
||||
UPDATED_AT TIMESTAMP NOT NULL,
|
||||
CONSTRAINT uk_proc_identity UNIQUE (IDENTITY_KEY)
|
||||
);
|
||||
CREATE INDEX idx_proc_head ON PROC_STATE (STATE, CMINMSGS_ID); -- 主泵队头查询(I1)
|
||||
|
||||
-- ② 统一投递事件 outbox(发消息侧)
|
||||
CREATE TABLE MSG_EVENT (
|
||||
EVENT_ID BIGSERIAL PRIMARY KEY,
|
||||
TARGET VARCHAR(30) NOT NULL, -- KAFKA:msg / KAFKA:schd(A起);ES:flight_hts / REDIS:flightInfo(B起)
|
||||
PARTITION_KEY VARCHAR(64), -- schd 事件恒为 FLID
|
||||
PAYLOAD_JSON TEXT NOT NULL,
|
||||
STATE VARCHAR(16) NOT NULL, -- PENDING/SENT/DEAD
|
||||
ATTEMPTS INT NOT NULL DEFAULT 0,
|
||||
NEXT_ATTEMPT_AT TIMESTAMP,
|
||||
ERROR_CLASS VARCHAR(20),
|
||||
LAST_ERROR VARCHAR(1000),
|
||||
CREATED_AT TIMESTAMP NOT NULL
|
||||
);
|
||||
CREATE INDEX idx_evt_head ON MSG_EVENT (TARGET, STATE, EVENT_ID); -- 每 target 队头(I1 双层)
|
||||
|
||||
-- ③ 泵作业调度记录(作业不插队:仅在消息队头空闲/退避窗口由主泵执行,决策 1 修订)
|
||||
CREATE TABLE PUMP_JOB (
|
||||
JOB_ID BIGSERIAL PRIMARY KEY,
|
||||
KIND VARCHAR(20) NOT NULL, -- ARCHIVE / HISTORY_SWEEP / PROJECTION_REBUILD
|
||||
STATE VARCHAR(16) NOT NULL, -- QUEUED/RUNNING/DONE/FAILED
|
||||
CREATED_AT TIMESTAMP NOT NULL,
|
||||
UPDATED_AT TIMESTAMP NOT NULL,
|
||||
LAST_ERROR VARCHAR(1000)
|
||||
);
|
||||
|
||||
-- ④ 15 类请求状态机(Reference & Query 域;与共享库 COUTMSGS 跨库:
|
||||
-- 先落 COUTMSGS 成功 → 再标 SENT,补偿重扫,最终一致)
|
||||
CREATE TABLE REQ_TRACK (
|
||||
REQ_ID BIGSERIAL PRIMARY KEY,
|
||||
REQ_TYPE VARCHAR(20) NOT NULL,
|
||||
PARAMS_JSON TEXT NOT NULL,
|
||||
STATE VARCHAR(16) NOT NULL, -- REGISTERED/SENT/WAITING/DONE/EXPIRED
|
||||
COUTMSGS_ID BIGINT, -- U18 修正:BIGINT(原 MySQL 版 INT)
|
||||
SENT_AT TIMESTAMP,
|
||||
COMPLETED_AT TIMESTAMP
|
||||
);
|
||||
CREATE INDEX idx_req_open ON REQ_TRACK (REQ_TYPE, STATE);
|
||||
|
||||
-- ⑤ 21 类静态主数据(SOURCE=ADMINAPI/AODB/PIPELINE 审计;弱事务 upsert)
|
||||
CREATE TABLE REF_MASTER (
|
||||
RTYPE VARCHAR(20) NOT NULL, -- AIRL/ARPT/...
|
||||
RKEY VARCHAR(64) NOT NULL,
|
||||
PAYLOAD_JSON TEXT NOT NULL,
|
||||
SOURCE VARCHAR(20) NOT NULL,
|
||||
REFRESHED_AT TIMESTAMP NOT NULL,
|
||||
PRIMARY KEY (RTYPE, RKEY)
|
||||
);
|
||||
@@ -1,115 +0,0 @@
|
||||
-- =====================================================================
|
||||
-- 自有库 · 阶段 A 运营航班表与计划代迁移 · ACM2-28 定案(选项 C)· 11g 修订
|
||||
-- ---------------------------------------------------------------------
|
||||
-- 存储边界(ACM2-28 定案,取代 ACM2-12「FLIGHT_STATE 缓做不落表、Redis 永续权威」口径):
|
||||
-- · FLIGHT_SCHD:SCHD 日计划快照 + FLOP/ADFT 增量合并后的当前运营航班权威态,一行一航班。
|
||||
-- · SCHD_GEN / SCHD_GEN_FLID:各日代版本(SQL CAS)与当前代航班全量集合(差删依据)。
|
||||
-- · Redis:彻底退出动态权威与全部写路径;阶段 A 读写事务全在自有库原子完成。
|
||||
-- · 增量 Upsert 语义:
|
||||
-- - 快照全量写入(DNLD):声明/更新 FDAY 归属,航班字段整体替换;
|
||||
-- - 增量写入(FLOP/ADFT):新插置 NULL FDAY,已有行保留原 FDAY,按字段列更新
|
||||
-- (与 legacy flightInfo hash「仅新增/覆盖 field」同语义);
|
||||
-- - 按代差删域化:DELETE FROM FLIGHT_SCHD WHERE FDAY = :day AND FLID IN (:diffSet)
|
||||
-- 仅删除仍属旧代的行,ADFT(FDAY=NULL)与已迁移至新代的同 FLID 行天然存活。
|
||||
-- · 时间列规范:统一使用 TIMESTAMP(6) WITH TIME ZONE。
|
||||
-- ---------------------------------------------------------------------
|
||||
-- 11g 修订(现场数据库版本 11g,废除 FLTR_JSON JSONB 整文档存储):
|
||||
-- · 表形态 = 运营航班宽表:一行一航班,字段即列,天然可索引、可直查、可加约束;
|
||||
-- · 列清单锚定 legacy SIS 契约(unisysaodbsis.xsd SCHD.FLTR 记录,ACMA-4 基线,
|
||||
-- 32 个 Handler 的 KEEP/FIX 翻译即以此为闭集):
|
||||
-- - 标量字段 → 真实列(约 45 列 + legacy 派生列 ABDG/LPSDT/ABN);
|
||||
-- - 1:N 明细集合(登机口/柜台/转盘/桥/延误/航线等,单航班可达 99 条)各占一列
|
||||
-- 存序列化文本(TEXT;11g 移植为 CLOB),阶段 2/3 语义钉死后按需升独立子表;
|
||||
-- · 值语义保持 legacy 字符串原样(不做库端类型转换),保证影子对拍逐字段保真;
|
||||
-- 范围查询需要的类型化列(如 SODT→DATE)按查询需求逐列后置提升。
|
||||
-- =====================================================================
|
||||
|
||||
-- ① 运营航班表(当前运营航班动态权威,FLID 与 legacy flightInfo 同键;一行一航班)
|
||||
CREATE TABLE FLIGHT_SCHD (
|
||||
FLID VARCHAR(32) NOT NULL PRIMARY KEY, -- AODB 唯一航班标识
|
||||
FDAY DATE NULL, -- 所属日计划代;NULL = 非代所有(ADFT/增量增建)
|
||||
-- ==== SCHD.FLTR 标量字段(unisysaodbsis.xsd,值保持 legacy 字符串原样)====
|
||||
ALCD VARCHAR(64) NULL, -- 航空公司代码
|
||||
ALSC VARCHAR(64) NULL, -- 航空公司简称
|
||||
FLNO VARCHAR(64) NULL, -- 航班号
|
||||
MVIN VARCHAR(64) NULL, -- 进离港标识(A=到港 D=离港)
|
||||
SODT VARCHAR(64) NULL, -- 计划时间(ddMMMyyHHmm)
|
||||
FLTY VARCHAR(64) NULL, -- 航班类型
|
||||
FLIN VARCHAR(64) NULL, -- 国内/国际/混合属性
|
||||
ACFT VARCHAR(64) NULL, -- 机型
|
||||
RENO VARCHAR(64) NULL, -- 机尾号
|
||||
TAOP VARCHAR(64) NULL, -- 实际承运人代码
|
||||
TAFL VARCHAR(64) NULL, -- 实际承运航班号
|
||||
TAID VARCHAR(64) NULL, -- 实际承运航班 FLID
|
||||
TRML VARCHAR(64) NULL, -- 航站楼
|
||||
MAXP VARCHAR(64) NULL, -- 最大旅客数
|
||||
CSOP VARCHAR(64) NULL, -- 共享承运人代码
|
||||
CSFT VARCHAR(64) NULL, -- 共享航班号
|
||||
MAID VARCHAR(32) NULL, -- 共享主航班 FLID
|
||||
ESTT VARCHAR(64) NULL, -- 预计时间
|
||||
ACTT VARCHAR(64) NULL, -- 实际时间
|
||||
STND VARCHAR(64) NULL, -- 备降站
|
||||
PHAG VARCHAR(64) NULL, -- 地服代理(值机)
|
||||
CNCL VARCHAR(64) NULL, -- 取消时间
|
||||
REMC VARCHAR(80) NULL, -- 备注
|
||||
BOTM VARCHAR(64) NULL, -- 摆渡车时间
|
||||
LACL VARCHAR(64) NULL, -- 行李确认时间
|
||||
FINT VARCHAR(64) NULL, -- 完成时间
|
||||
APPT VARCHAR(64) NULL, -- 旅客到达时间
|
||||
EGSR VARCHAR(64) NULL, -- 保障开始时间
|
||||
EGST VARCHAR(64) NULL, -- 保障结束时间
|
||||
FHAG VARCHAR(64) NULL, -- 地服代理(货运)
|
||||
MHAG VARCHAR(64) NULL, -- 地服代理(机务)
|
||||
VIPP VARCHAR(64) NULL, -- VIP 旅客数
|
||||
VIPR VARCHAR(64) NULL, -- VIP 等级
|
||||
LBNO VARCHAR(64) NULL, -- 行李件数
|
||||
LBWT VARCHAR(64) NULL, -- 行李重量
|
||||
PAXC VARCHAR(64) NULL, -- 旅客计数
|
||||
EXSC VARCHAR(64) NULL, -- 例外代码
|
||||
EXSR VARCHAR(256) NULL, -- 例外原因
|
||||
FTSS VARCHAR(64) NULL, -- 航班状态
|
||||
PEDT VARCHAR(64) NULL, -- 前序估计时间
|
||||
NEAT VARCHAR(64) NULL, -- 下机完成时间
|
||||
PADT VARCHAR(64) NULL, -- 旅客登机时间
|
||||
NAAT VARCHAR(64) NULL, -- 关门时间
|
||||
-- ==== legacy flightInfo 派生标量字段(user-stories §SCHD.FLTR)====
|
||||
ABDG VARCHAR(64) NULL, -- 当前登机桥(派生)
|
||||
LPSDT VARCHAR(64) NULL, -- 历史计划机位(派生)
|
||||
ABN VARCHAR(64) NULL, -- 异常标识(派生)
|
||||
-- ==== 1:N 明细集合(序列化文本,一列一集合;阶段 2/3 按需升独立子表)====
|
||||
ROUT_TXT TEXT NULL, -- 航线(ROUTEDAILY ×6)
|
||||
ERUT_TXT TEXT NULL, -- 扩展航线(ROUTEDAILY ×2..7)
|
||||
CHDT_TXT TEXT NULL, -- 廊桥/ chute 数据(×99)
|
||||
GTDT_TXT TEXT NULL, -- 登机口(×99)
|
||||
PSDT_TXT TEXT NULL, -- 机位(×9)
|
||||
CKDT_TXT TEXT NULL, -- 值机柜台(×99)
|
||||
CLDT_TXT TEXT NULL, -- 行李转盘(×99)
|
||||
DELY_TXT TEXT NULL, -- 延误(不限)
|
||||
CHOT_TXT TEXT NULL, -- 客桥桥载(×99)
|
||||
ABTM_TXT TEXT NULL, -- 登机桥(×99)
|
||||
SRVT_TXT TEXT NULL, -- 服务(不限)
|
||||
VIPF_TXT TEXT NULL, -- VIP(不限)
|
||||
MAFL_TXT TEXT NULL, -- 共享航班列表(legacy 派生集合)
|
||||
FDIV_TXT TEXT NULL, -- 备降明细
|
||||
FRET_TXT TEXT NULL, -- 返航明细
|
||||
FLAB_TXT TEXT NULL, -- 中止明细
|
||||
CREATED_AT TIMESTAMP(6) WITH TIME ZONE NOT NULL,
|
||||
UPDATED_AT TIMESTAMP(6) WITH TIME ZONE NOT NULL
|
||||
);
|
||||
CREATE INDEX idx_flight_schd_fday ON FLIGHT_SCHD (FDAY); -- 日代扫描与影子对拍分片
|
||||
-- 运营查询索引按需逐列追加(11g/PG 均为普通 B-tree,零方言成本)
|
||||
|
||||
-- ② 日计划代与差删元数据表(代版本推进与版本 CAS)
|
||||
CREATE TABLE SCHD_GEN (
|
||||
FDAY DATE NOT NULL PRIMARY KEY, -- 计划日(yyyy-MM-dd)
|
||||
VERSION BIGINT NOT NULL, -- 代版本号(单调递增)
|
||||
UPDATED_AT TIMESTAMP(6) WITH TIME ZONE NOT NULL
|
||||
);
|
||||
|
||||
-- ③ 当前代有效航班 FLID 集合(差删依据)
|
||||
CREATE TABLE SCHD_GEN_FLID (
|
||||
FDAY DATE NOT NULL, -- 所属计划日(FK 级联删除)
|
||||
FLID VARCHAR(32) NOT NULL, -- 当前代有效航班
|
||||
CONSTRAINT pk_schd_gen_flid PRIMARY KEY (FDAY, FLID),
|
||||
CONSTRAINT fk_schd_gen_flid FOREIGN KEY (FDAY) REFERENCES SCHD_GEN (FDAY) ON DELETE CASCADE
|
||||
);
|
||||
@@ -1,118 +0,0 @@
|
||||
-- =====================================================================
|
||||
-- ACM2-29 · 全宽表·零子表(Zero-Subtable Wide Table)定案落地
|
||||
-- ---------------------------------------------------------------------
|
||||
-- 废除「16 个明细集合保留 *_TXT 并逐个升独立子表」的原规划(对 XSD
|
||||
-- maxOccurs=99 的过度设计)。结合 docs/legacy/SIS_AODB_RMS-V0.1.md 报文
|
||||
-- 样例与成都现场(双流/天府)地服实际规律——登机门 1~2 个、值机柜台专属
|
||||
-- 1~3 个、转盘 1~2 个、延误单有效、靠撤桥/轮挡各 1 次——全部集合收敛为
|
||||
-- FLIGHT_SCHD 宽表的标准 VARCHAR 标量列或紧凑格式化字串,零子表、零 CLOB:
|
||||
-- · 平铺标量列(属性名 + 出现槽位序号,可按需直接追加普通 B-tree,
|
||||
-- 11g/PG 零方言成本):
|
||||
-- GTDT → GATE/PGOT/PGCT/GOTM/GCTM/GTYP ×2 组(登机门 1~2 个)
|
||||
-- CKDT → CHKC/CCLS/PCOT/PCCT/COTM/CCTM/CTYP ×3 组
|
||||
-- (值机柜台 1~3 个;同柜台分舱复用条目在写侧抹平去重)
|
||||
-- CLDT → BELT/BCLS/BPCOT/BPCCT/FBAG/LBAG/BTYP ×2 组(转盘 1~2 个;
|
||||
-- B 前缀时刻 = BELT 专属,避免与值机 PCOT/PCCT 同名)
|
||||
-- PSDT → PSST/STST/STET ×2 组(计划机位 1~2 个)
|
||||
-- CHDT → CHUT/CHCLS/PCBT/PCET/CBTM/CETM/CHTYP ×2 组(离港通道 1~2 个;
|
||||
-- CH 前缀 = CHUTE 专属,避免与值机 CCLS/CTYP 同名)
|
||||
-- DELY → DELY_CODE/DELY_STRT/DELY_DURA/DELY_REMC(单有效覆盖语义)
|
||||
-- ABTM → ABTM_A/ABTM_D(靠桥/撤桥时刻;桥号沿用派生列 ABDG)
|
||||
-- CHOT → CHOT_ON/CHOT_OFF(上/下轮挡时刻;机位沿用派生列 STND)
|
||||
-- FDIV/FRET/FLAB → 前缀标量列(规范 1:0..1 单值异常)
|
||||
-- 超出现场定界的条目按定案丢弃(不再为 XSD 理论上限设计)。
|
||||
-- · 紧凑 VARCHAR 字串列(无界/航路型集合,11g VARCHAR2 内联存储,非 CLOB):
|
||||
-- ROUT/ERUT → ROUT_PATH/ERUT_PATH(≤7 站紧凑航路 "APCD/SCAT/SCDT,...")
|
||||
-- SRVT/VIPF/MAFL → *_TEXT(服务/VIP/共享列表条数无 XSD 上限,存 JSON 数组;
|
||||
-- 超长写侧 fail fast,不允许静默截断)
|
||||
-- · 值语义保持 legacy 字符串原样;读侧视图由标量列重建集合键,
|
||||
-- 与 legacy flightInfo hash 同构(KAFKA_SCHD 线格式与 FS7 对拍不变)。
|
||||
-- · 运营资源消息语义 = 单资源集合级全量快照替换;外层航班字段仍为
|
||||
-- 字段级增量合并(集合键出现即整集合覆盖,缺槽位置 NULL)。
|
||||
-- ---------------------------------------------------------------------
|
||||
-- 交叉实例单写者互斥(I5 修正定案):PIPELINE_LOCK 行级锁。主泵写事务
|
||||
-- 持有 FLIGHT_SCHD_WRITER 行 SELECT ... FOR UPDATE;连接断开、提交或回滚
|
||||
-- 时由数据库释放,PG 与 Oracle 11g 同构,无 DBMS_LOCK DBA 特权依赖。
|
||||
-- =====================================================================
|
||||
|
||||
ALTER TABLE FLIGHT_SCHD
|
||||
-- 登机门 GTDT(现场 1~2 个)
|
||||
ADD COLUMN GATE1 VARCHAR(64), ADD COLUMN PGOT1 VARCHAR(64), ADD COLUMN PGCT1 VARCHAR(64),
|
||||
ADD COLUMN GOTM1 VARCHAR(64), ADD COLUMN GCTM1 VARCHAR(64), ADD COLUMN GTYP1 VARCHAR(64),
|
||||
ADD COLUMN GATE2 VARCHAR(64), ADD COLUMN PGOT2 VARCHAR(64), ADD COLUMN PGCT2 VARCHAR(64),
|
||||
ADD COLUMN GOTM2 VARCHAR(64), ADD COLUMN GCTM2 VARCHAR(64), ADD COLUMN GTYP2 VARCHAR(64),
|
||||
-- 值机柜台 CKDT(现场专属 1~3 个,分舱复用条目写侧抹平)
|
||||
ADD COLUMN CHKC1 VARCHAR(64), ADD COLUMN CCLS1 VARCHAR(64),
|
||||
ADD COLUMN PCOT1 VARCHAR(64), ADD COLUMN PCCT1 VARCHAR(64),
|
||||
ADD COLUMN COTM1 VARCHAR(64), ADD COLUMN CCTM1 VARCHAR(64), ADD COLUMN CTYP1 VARCHAR(64),
|
||||
ADD COLUMN CHKC2 VARCHAR(64), ADD COLUMN CCLS2 VARCHAR(64),
|
||||
ADD COLUMN PCOT2 VARCHAR(64), ADD COLUMN PCCT2 VARCHAR(64),
|
||||
ADD COLUMN COTM2 VARCHAR(64), ADD COLUMN CCTM2 VARCHAR(64), ADD COLUMN CTYP2 VARCHAR(64),
|
||||
ADD COLUMN CHKC3 VARCHAR(64), ADD COLUMN CCLS3 VARCHAR(64),
|
||||
ADD COLUMN PCOT3 VARCHAR(64), ADD COLUMN PCCT3 VARCHAR(64),
|
||||
ADD COLUMN COTM3 VARCHAR(64), ADD COLUMN CCTM3 VARCHAR(64), ADD COLUMN CTYP3 VARCHAR(64),
|
||||
-- 行李转盘 CLDT(现场 1~2 个;B 前缀时刻 = BELT 专属)
|
||||
ADD COLUMN BELT1 VARCHAR(64), ADD COLUMN BCLS1 VARCHAR(64),
|
||||
ADD COLUMN BPCOT1 VARCHAR(64), ADD COLUMN BPCCT1 VARCHAR(64),
|
||||
ADD COLUMN FBAG1 VARCHAR(64), ADD COLUMN LBAG1 VARCHAR(64), ADD COLUMN BTYP1 VARCHAR(64),
|
||||
ADD COLUMN BELT2 VARCHAR(64), ADD COLUMN BCLS2 VARCHAR(64),
|
||||
ADD COLUMN BPCOT2 VARCHAR(64), ADD COLUMN BPCCT2 VARCHAR(64),
|
||||
ADD COLUMN FBAG2 VARCHAR(64), ADD COLUMN LBAG2 VARCHAR(64), ADD COLUMN BTYP2 VARCHAR(64),
|
||||
-- 计划机位 PSDT(现场 1~2 个)
|
||||
ADD COLUMN PSST1 VARCHAR(64), ADD COLUMN STST1 VARCHAR(64), ADD COLUMN STET1 VARCHAR(64),
|
||||
ADD COLUMN PSST2 VARCHAR(64), ADD COLUMN STST2 VARCHAR(64), ADD COLUMN STET2 VARCHAR(64),
|
||||
-- 离港行李通道 CHDT(现场 1~2 个;CH 前缀 = CHUTE 专属)
|
||||
ADD COLUMN CHUT1 VARCHAR(64), ADD COLUMN CHCLS1 VARCHAR(64),
|
||||
ADD COLUMN PCBT1 VARCHAR(64), ADD COLUMN PCET1 VARCHAR(64),
|
||||
ADD COLUMN CBTM1 VARCHAR(64), ADD COLUMN CETM1 VARCHAR(64), ADD COLUMN CHTYP1 VARCHAR(64),
|
||||
ADD COLUMN CHUT2 VARCHAR(64), ADD COLUMN CHCLS2 VARCHAR(64),
|
||||
ADD COLUMN PCBT2 VARCHAR(64), ADD COLUMN PCET2 VARCHAR(64),
|
||||
ADD COLUMN CBTM2 VARCHAR(64), ADD COLUMN CETM2 VARCHAR(64), ADD COLUMN CHTYP2 VARCHAR(64),
|
||||
-- 延误 DELY(单有效覆盖语义)
|
||||
ADD COLUMN DELY_CODE VARCHAR(64),
|
||||
ADD COLUMN DELY_STRT VARCHAR(64),
|
||||
ADD COLUMN DELY_DURA VARCHAR(64),
|
||||
ADD COLUMN DELY_REMC VARCHAR(80),
|
||||
-- 靠撤桥 ABTM / 轮挡 CHOT(保障里程碑时刻)
|
||||
ADD COLUMN ABTM_A VARCHAR(64),
|
||||
ADD COLUMN ABTM_D VARCHAR(64),
|
||||
ADD COLUMN CHOT_ON VARCHAR(64),
|
||||
ADD COLUMN CHOT_OFF VARCHAR(64),
|
||||
-- 异常明细 FDIV/FRET/FLAB(规范 1:0..1 单值异常)
|
||||
ADD COLUMN FDIV_DDES VARCHAR(64),
|
||||
ADD COLUMN FDIV_DDIR VARCHAR(64),
|
||||
ADD COLUMN FDIV_REMC VARCHAR(80),
|
||||
ADD COLUMN FRET_REID VARCHAR(64),
|
||||
ADD COLUMN FRET_RSN VARCHAR(80),
|
||||
ADD COLUMN FLAB_ARES VARCHAR(64),
|
||||
ADD COLUMN FLAB_RSN VARCHAR(80),
|
||||
-- 紧凑航路字串(≤7 站,免除多表关联)
|
||||
ADD COLUMN ROUT_PATH VARCHAR(256),
|
||||
ADD COLUMN ERUT_PATH VARCHAR(256),
|
||||
-- 无界集合紧凑 JSON 数组字串(11g VARCHAR2 内联,非 CLOB;超长写侧 fail fast)
|
||||
ADD COLUMN SRVT_TEXT VARCHAR(2000),
|
||||
ADD COLUMN VIPF_TEXT VARCHAR(512),
|
||||
ADD COLUMN MAFL_TEXT VARCHAR(512);
|
||||
|
||||
-- 16 个集合的过渡 *_TXT 文本列全清场
|
||||
ALTER TABLE FLIGHT_SCHD
|
||||
DROP COLUMN ROUT_TXT, DROP COLUMN ERUT_TXT, DROP COLUMN CHDT_TXT,
|
||||
DROP COLUMN GTDT_TXT, DROP COLUMN PSDT_TXT, DROP COLUMN CKDT_TXT,
|
||||
DROP COLUMN CLDT_TXT, DROP COLUMN DELY_TXT, DROP COLUMN CHOT_TXT,
|
||||
DROP COLUMN ABTM_TXT, DROP COLUMN SRVT_TXT, DROP COLUMN VIPF_TXT,
|
||||
DROP COLUMN MAFL_TXT, DROP COLUMN FDIV_TXT, DROP COLUMN FRET_TXT,
|
||||
DROP COLUMN FLAB_TXT;
|
||||
|
||||
-- 运营查询索引按需逐列追加示例(11g/PG 均为普通 B-tree,零方言成本):
|
||||
-- CREATE INDEX idx_flight_schd_gate1 ON FLIGHT_SCHD (GATE1);
|
||||
-- CREATE INDEX idx_flight_schd_chkc1 ON FLIGHT_SCHD (CHKC1);
|
||||
-- CREATE INDEX idx_flight_schd_dely_code ON FLIGHT_SCHD (DELY_CODE);
|
||||
|
||||
-- 交叉实例单写者互斥行(I5:SELECT ... FOR UPDATE 行级锁)
|
||||
CREATE TABLE PIPELINE_LOCK (
|
||||
LOCK_KEY VARCHAR(32) NOT NULL PRIMARY KEY,
|
||||
OWNER_INFO VARCHAR(128),
|
||||
UPDATED_AT TIMESTAMP(6) WITH TIME ZONE NOT NULL
|
||||
);
|
||||
INSERT INTO PIPELINE_LOCK (LOCK_KEY, OWNER_INFO, UPDATED_AT)
|
||||
VALUES ('FLIGHT_SCHD_WRITER', NULL, CURRENT_TIMESTAMP);
|
||||
@@ -1,146 +0,0 @@
|
||||
-- docs/flight-state.md (ACM2-29): lossless detail tables + tracking columns
|
||||
|
||||
ALTER TABLE flight_schd
|
||||
ADD COLUMN IF NOT EXISTS last_message_id VARCHAR(64),
|
||||
ADD COLUMN IF NOT EXISTS state_version BIGINT NOT NULL DEFAULT 0;
|
||||
|
||||
ALTER TABLE schd_gen
|
||||
ADD COLUMN IF NOT EXISTS last_message_id VARCHAR(64);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS flight_gate (
|
||||
flid VARCHAR(32) NOT NULL,
|
||||
ordinal INTEGER NOT NULL,
|
||||
source_seq VARCHAR(64),
|
||||
record_version BIGINT NOT NULL DEFAULT 0,
|
||||
gate VARCHAR(64),
|
||||
pgot VARCHAR(64),
|
||||
pgct VARCHAR(64),
|
||||
gotm VARCHAR(64),
|
||||
gctm VARCHAR(64),
|
||||
gtyp VARCHAR(64),
|
||||
created_at TIMESTAMP(6) WITH TIME ZONE NOT NULL,
|
||||
updated_at TIMESTAMP(6) WITH TIME ZONE NOT NULL,
|
||||
PRIMARY KEY (flid, ordinal)
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS flight_checkin (
|
||||
flid VARCHAR(32) NOT NULL,
|
||||
ordinal INTEGER NOT NULL,
|
||||
source_seq VARCHAR(64),
|
||||
record_version BIGINT NOT NULL DEFAULT 0,
|
||||
chkc VARCHAR(64),
|
||||
ccls VARCHAR(64),
|
||||
pcot VARCHAR(64),
|
||||
pcct VARCHAR(64),
|
||||
cotm VARCHAR(64),
|
||||
cctm VARCHAR(64),
|
||||
ctyp VARCHAR(64),
|
||||
created_at TIMESTAMP(6) WITH TIME ZONE NOT NULL,
|
||||
updated_at TIMESTAMP(6) WITH TIME ZONE NOT NULL,
|
||||
PRIMARY KEY (flid, ordinal)
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS flight_belt (
|
||||
flid VARCHAR(32) NOT NULL,
|
||||
ordinal INTEGER NOT NULL,
|
||||
source_seq VARCHAR(64),
|
||||
record_version BIGINT NOT NULL DEFAULT 0,
|
||||
belt VARCHAR(64),
|
||||
bcls VARCHAR(64),
|
||||
pcot VARCHAR(64),
|
||||
pcct VARCHAR(64),
|
||||
fbag VARCHAR(64),
|
||||
lbag VARCHAR(64),
|
||||
btyp VARCHAR(64),
|
||||
created_at TIMESTAMP(6) WITH TIME ZONE NOT NULL,
|
||||
updated_at TIMESTAMP(6) WITH TIME ZONE NOT NULL,
|
||||
PRIMARY KEY (flid, ordinal)
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS flight_stand_plan (
|
||||
flid VARCHAR(32) NOT NULL,
|
||||
ordinal INTEGER NOT NULL,
|
||||
source_seq VARCHAR(64),
|
||||
record_version BIGINT NOT NULL DEFAULT 0,
|
||||
psst VARCHAR(64),
|
||||
stst VARCHAR(64),
|
||||
stet VARCHAR(64),
|
||||
created_at TIMESTAMP(6) WITH TIME ZONE NOT NULL,
|
||||
updated_at TIMESTAMP(6) WITH TIME ZONE NOT NULL,
|
||||
PRIMARY KEY (flid, ordinal)
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS flight_chute (
|
||||
flid VARCHAR(32) NOT NULL,
|
||||
ordinal INTEGER NOT NULL,
|
||||
source_seq VARCHAR(64),
|
||||
record_version BIGINT NOT NULL DEFAULT 0,
|
||||
chut VARCHAR(64),
|
||||
chcls VARCHAR(64),
|
||||
pcbt VARCHAR(64),
|
||||
pcet VARCHAR(64),
|
||||
cbtm VARCHAR(64),
|
||||
cetm VARCHAR(64),
|
||||
chtyp VARCHAR(64),
|
||||
created_at TIMESTAMP(6) WITH TIME ZONE NOT NULL,
|
||||
updated_at TIMESTAMP(6) WITH TIME ZONE NOT NULL,
|
||||
PRIMARY KEY (flid, ordinal)
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS flight_delay (
|
||||
flid VARCHAR(32) NOT NULL,
|
||||
ordinal INTEGER NOT NULL,
|
||||
source_seq VARCHAR(64),
|
||||
record_version BIGINT NOT NULL DEFAULT 0,
|
||||
code VARCHAR(64),
|
||||
strt VARCHAR(64),
|
||||
dura VARCHAR(64),
|
||||
remc VARCHAR(80),
|
||||
created_at TIMESTAMP(6) WITH TIME ZONE NOT NULL,
|
||||
updated_at TIMESTAMP(6) WITH TIME ZONE NOT NULL,
|
||||
PRIMARY KEY (flid, ordinal)
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS flight_bridge_op (
|
||||
flid VARCHAR(32) NOT NULL,
|
||||
ordinal INTEGER NOT NULL,
|
||||
source_seq VARCHAR(64),
|
||||
record_version BIGINT NOT NULL DEFAULT 0,
|
||||
abdg VARCHAR(64),
|
||||
abop VARCHAR(64),
|
||||
aotm VARCHAR(64),
|
||||
created_at TIMESTAMP(6) WITH TIME ZONE NOT NULL,
|
||||
updated_at TIMESTAMP(6) WITH TIME ZONE NOT NULL,
|
||||
PRIMARY KEY (flid, ordinal)
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS flight_chock_op (
|
||||
flid VARCHAR(32) NOT NULL,
|
||||
ordinal INTEGER NOT NULL,
|
||||
source_seq VARCHAR(64),
|
||||
record_version BIGINT NOT NULL DEFAULT 0,
|
||||
chid VARCHAR(64),
|
||||
chst VARCHAR(64),
|
||||
chtm VARCHAR(64),
|
||||
created_at TIMESTAMP(6) WITH TIME ZONE NOT NULL,
|
||||
updated_at TIMESTAMP(6) WITH TIME ZONE NOT NULL,
|
||||
PRIMARY KEY (flid, ordinal)
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS flight_route_point (
|
||||
flid VARCHAR(32) NOT NULL,
|
||||
ordinal INTEGER NOT NULL,
|
||||
source_seq VARCHAR(64),
|
||||
record_version BIGINT NOT NULL DEFAULT 0,
|
||||
route_kind VARCHAR(8) NOT NULL,
|
||||
apcd VARCHAR(64),
|
||||
scat VARCHAR(64),
|
||||
scdt VARCHAR(64),
|
||||
created_at TIMESTAMP(6) WITH TIME ZONE NOT NULL,
|
||||
updated_at TIMESTAMP(6) WITH TIME ZONE NOT NULL,
|
||||
PRIMARY KEY (flid, ordinal)
|
||||
);
|
||||
|
||||
CREATE INDEX IF NOT EXISTS idx_flight_gate_flid ON flight_gate (flid);
|
||||
CREATE INDEX IF NOT EXISTS idx_flight_checkin_flid ON flight_checkin (flid);
|
||||
CREATE INDEX IF NOT EXISTS idx_flight_belt_flid ON flight_belt (flid);
|
||||
@@ -1,57 +0,0 @@
|
||||
-- docs/flight-state.md §8 (ACM2-29 P2-2): compatibility read view.
|
||||
-- 提供「首个/第二个资源 + 总数」的运营查询投影;完整明细仍在各明细表可查。
|
||||
-- PG 专属语法(LATERAL);Oracle 11g 方言随 P3-B 单独提供 location。
|
||||
|
||||
CREATE OR REPLACE VIEW flight_schd_display AS
|
||||
SELECT
|
||||
f.flid,
|
||||
f.fday,
|
||||
f.flno,
|
||||
f.mvin,
|
||||
f.sodt,
|
||||
f.stnd,
|
||||
f.abdg,
|
||||
f.state_version,
|
||||
f.last_message_id,
|
||||
|
||||
g1.gate AS gate1,
|
||||
g2.gate AS gate2,
|
||||
COALESCE(g_total.cnt, 0) AS gate_total,
|
||||
|
||||
c1.chkc AS chkc1,
|
||||
c2.chkc AS chkc2,
|
||||
COALESCE(c_total.cnt, 0) AS checkin_total,
|
||||
|
||||
b1.belt AS belt1,
|
||||
COALESCE(b_total.cnt, 0) AS belt_total,
|
||||
|
||||
dly.code AS dely_code,
|
||||
dly.strt AS dely_strt
|
||||
FROM flight_schd f
|
||||
LEFT JOIN LATERAL (
|
||||
SELECT gate FROM flight_gate WHERE flid = f.flid ORDER BY ordinal LIMIT 1 OFFSET 0
|
||||
) g1 ON TRUE
|
||||
LEFT JOIN LATERAL (
|
||||
SELECT gate FROM flight_gate WHERE flid = f.flid ORDER BY ordinal LIMIT 1 OFFSET 1
|
||||
) g2 ON TRUE
|
||||
LEFT JOIN LATERAL (
|
||||
SELECT count(*) AS cnt FROM flight_gate WHERE flid = f.flid
|
||||
) g_total ON TRUE
|
||||
LEFT JOIN LATERAL (
|
||||
SELECT chkc FROM flight_checkin WHERE flid = f.flid ORDER BY ordinal LIMIT 1 OFFSET 0
|
||||
) c1 ON TRUE
|
||||
LEFT JOIN LATERAL (
|
||||
SELECT chkc FROM flight_checkin WHERE flid = f.flid ORDER BY ordinal LIMIT 1 OFFSET 1
|
||||
) c2 ON TRUE
|
||||
LEFT JOIN LATERAL (
|
||||
SELECT count(*) AS cnt FROM flight_checkin WHERE flid = f.flid
|
||||
) c_total ON TRUE
|
||||
LEFT JOIN LATERAL (
|
||||
SELECT belt FROM flight_belt WHERE flid = f.flid ORDER BY ordinal LIMIT 1 OFFSET 0
|
||||
) b1 ON TRUE
|
||||
LEFT JOIN LATERAL (
|
||||
SELECT count(*) AS cnt FROM flight_belt WHERE flid = f.flid
|
||||
) b_total ON TRUE
|
||||
LEFT JOIN LATERAL (
|
||||
SELECT code, strt FROM flight_delay WHERE flid = f.flid ORDER BY ordinal LIMIT 1
|
||||
) dly ON TRUE;
|
||||
@@ -1,18 +0,0 @@
|
||||
-- docs/flight-state.md §5 (ACM2-29 P2-3): 提交后共享信箱回填的持久补偿待办。
|
||||
-- 业务事务已提交(PROC_STATE=SUCCEEDED)后回填失败 → 落本表重试;
|
||||
-- 回填失败不得把已成功的业务事务重新标记为失败,也不得重放业务变更。
|
||||
|
||||
CREATE TABLE IF NOT EXISTS backfill_todo (
|
||||
cminmsgs_id BIGINT PRIMARY KEY,
|
||||
sndr VARCHAR(64) NOT NULL,
|
||||
type VARCHAR(32) NOT NULL,
|
||||
styp VARCHAR(32),
|
||||
seqn BIGINT,
|
||||
attempts INTEGER NOT NULL DEFAULT 0,
|
||||
next_attempt_at TIMESTAMP(6) WITH TIME ZONE NOT NULL,
|
||||
last_error VARCHAR(512),
|
||||
created_at TIMESTAMP(6) WITH TIME ZONE NOT NULL,
|
||||
updated_at TIMESTAMP(6) WITH TIME ZONE NOT NULL
|
||||
);
|
||||
|
||||
CREATE INDEX IF NOT EXISTS idx_backfill_todo_due ON backfill_todo (next_attempt_at);
|
||||
@@ -1,45 +0,0 @@
|
||||
-- docs/flight-state.md §7 步骤 5 (ACM2-29 P4): 旧损失性结构退场。
|
||||
-- v2 无损明细表已是唯一权威存储(V1.3.0 起),槽位/里程碑/紧凑航路列自 V1.3.0 起零写入、
|
||||
-- P2-2 起零读取;对拍(FS7 v2 双读 + 全结构回环矩阵)与升级链验证通过后关闭回退窗口,
|
||||
-- 本迁移物理删除这些列与其冗余索引。SRVT/VIPF/MAFL_TEXT 与异常前缀列为无损承载,保留。
|
||||
|
||||
ALTER TABLE flight_schd
|
||||
DROP COLUMN IF EXISTS gate1, DROP COLUMN IF EXISTS pgot1, DROP COLUMN IF EXISTS pgct1,
|
||||
DROP COLUMN IF EXISTS gotm1, DROP COLUMN IF EXISTS gctm1, DROP COLUMN IF EXISTS gtyp1,
|
||||
DROP COLUMN IF EXISTS gate2, DROP COLUMN IF EXISTS pgot2, DROP COLUMN IF EXISTS pgct2,
|
||||
DROP COLUMN IF EXISTS gotm2, DROP COLUMN IF EXISTS gctm2, DROP COLUMN IF EXISTS gtyp2,
|
||||
|
||||
DROP COLUMN IF EXISTS chkc1, DROP COLUMN IF EXISTS ccls1, DROP COLUMN IF EXISTS pcot1,
|
||||
DROP COLUMN IF EXISTS pcct1, DROP COLUMN IF EXISTS cotm1, DROP COLUMN IF EXISTS cctm1,
|
||||
DROP COLUMN IF EXISTS ctyp1, DROP COLUMN IF EXISTS chkc2, DROP COLUMN IF EXISTS ccls2,
|
||||
DROP COLUMN IF EXISTS pcot2, DROP COLUMN IF EXISTS pcct2, DROP COLUMN IF EXISTS cotm2,
|
||||
DROP COLUMN IF EXISTS cctm2, DROP COLUMN IF EXISTS ctyp2, DROP COLUMN IF EXISTS chkc3,
|
||||
DROP COLUMN IF EXISTS ccls3, DROP COLUMN IF EXISTS pcot3, DROP COLUMN IF EXISTS pcct3,
|
||||
DROP COLUMN IF EXISTS cotm3, DROP COLUMN IF EXISTS cctm3, DROP COLUMN IF EXISTS ctyp3,
|
||||
|
||||
DROP COLUMN IF EXISTS belt1, DROP COLUMN IF EXISTS bcls1, DROP COLUMN IF EXISTS bpcot1,
|
||||
DROP COLUMN IF EXISTS bpcct1, DROP COLUMN IF EXISTS fbag1, DROP COLUMN IF EXISTS lbag1,
|
||||
DROP COLUMN IF EXISTS btyp1, DROP COLUMN IF EXISTS belt2, DROP COLUMN IF EXISTS bcls2,
|
||||
DROP COLUMN IF EXISTS bpcot2, DROP COLUMN IF EXISTS bpcct2, DROP COLUMN IF EXISTS fbag2,
|
||||
DROP COLUMN IF EXISTS lbag2, DROP COLUMN IF EXISTS btyp2,
|
||||
|
||||
DROP COLUMN IF EXISTS psst1, DROP COLUMN IF EXISTS stst1, DROP COLUMN IF EXISTS stet1,
|
||||
DROP COLUMN IF EXISTS psst2, DROP COLUMN IF EXISTS stst2, DROP COLUMN IF EXISTS stet2,
|
||||
|
||||
DROP COLUMN IF EXISTS chut1, DROP COLUMN IF EXISTS chcls1, DROP COLUMN IF EXISTS pcbt1,
|
||||
DROP COLUMN IF EXISTS pcet1, DROP COLUMN IF EXISTS cbtm1, DROP COLUMN IF EXISTS cetm1,
|
||||
DROP COLUMN IF EXISTS chtyp1, DROP COLUMN IF EXISTS chut2, DROP COLUMN IF EXISTS chcls2,
|
||||
DROP COLUMN IF EXISTS pcbt2, DROP COLUMN IF EXISTS pcet2, DROP COLUMN IF EXISTS cbtm2,
|
||||
DROP COLUMN IF EXISTS cetm2, DROP COLUMN IF EXISTS chtyp2,
|
||||
|
||||
DROP COLUMN IF EXISTS dely_code, DROP COLUMN IF EXISTS dely_strt,
|
||||
DROP COLUMN IF EXISTS dely_dura, DROP COLUMN IF EXISTS dely_remc,
|
||||
DROP COLUMN IF EXISTS abtm_a, DROP COLUMN IF EXISTS abtm_d,
|
||||
DROP COLUMN IF EXISTS chot_on, DROP COLUMN IF EXISTS chot_off,
|
||||
|
||||
DROP COLUMN IF EXISTS rout_path, DROP COLUMN IF EXISTS erut_path;
|
||||
|
||||
-- V1.3.0 的三个 (flid) 单列索引与 PK (flid, ordinal) 前缀冗余(L2),一并清理
|
||||
DROP INDEX IF EXISTS idx_flight_gate_flid;
|
||||
DROP INDEX IF EXISTS idx_flight_checkin_flid;
|
||||
DROP INDEX IF EXISTS idx_flight_belt_flid;
|
||||
@@ -0,0 +1,306 @@
|
||||
-- =====================================================================
|
||||
-- 航班运行数据接入与当前状态管理 · 全量基线
|
||||
-- ---------------------------------------------------------------------
|
||||
-- 权威设计:docs/flight-state.md(审计定稿)。本脚本整体取代历史迁移
|
||||
-- (V1.0.0–V1.4.0 已删除),按 §3.2 表职责建立全部分层:
|
||||
-- · 决策层:FLIGHT_SCHD + 8 张资源明细表 + FLIGHT_ROUTE_POINT —— 承担正确性;
|
||||
-- · 管道层:PIPELINE_LOCK / PROC_STATE / MSG_EVENT(outbox) / REQ_TRACK / BACKFILL_TODO;
|
||||
-- · 留痕层:SCHD_SNAP_LOG —— 只追加、不参与决策、可重建;
|
||||
-- · 证据层:报文原文归档 —— 冷路径,尚未交付(ARCHIVE_KEY 仅留引用位)。
|
||||
-- 核心定案(对照文档章节):
|
||||
-- · 身份:FLID 主键;OPERATION_DAY 一经确定不可变(§3.1/§5.3,应用层校验);
|
||||
-- STATE ∈ {ACTIVE, DELETED},无 ARCHIVED —— 物理清除只发生在历史归档成功之后(§8.2);
|
||||
-- · 无名单差删:主链路无集合删除;删除入口只有 FDEL(§6.2)与历史归档(§8.2);
|
||||
-- · 版本:每次成功写入推进 STATE_VERSION;Kafka 判旧 = (FLID, STATE_VERSION, UPDATED_AT)(§7.3);
|
||||
-- · 出站:COUTMSGS 是共享 MySQL 信箱(他人系统库,本系统不建表,迁移不覆盖)。
|
||||
-- 类型口径:TIMESTAMP(6) WITH TIME ZONE 统一 UTC 语义;无 JSONB/CLOB 依赖;
|
||||
-- BIGSERIAL 为 PostgreSQL 方言(Oracle 适配见 §10,未定前不预设)。
|
||||
-- =====================================================================
|
||||
|
||||
-- ① 单行锁:串行化状态写事务(§1 边界:只串行化 DB 事务,不代替消息认领/选主/故障切换)
|
||||
CREATE TABLE PIPELINE_LOCK (
|
||||
LOCK_ID INT NOT NULL PRIMARY KEY, -- 恒为 1
|
||||
UPDATED_AT TIMESTAMP(6) WITH TIME ZONE NOT NULL
|
||||
);
|
||||
INSERT INTO PIPELINE_LOCK (LOCK_ID, UPDATED_AT) VALUES (1, now());
|
||||
|
||||
-- ② 处理伴生状态:与共享信箱 CMINMSGS 一一对应(MSG_ID = CMINMSGS_ID)。
|
||||
-- 兼作快照重放判定(§5.1 步骤 2):MSG_ID 已有成功终态 → 重放,直接记幂等成功。
|
||||
CREATE TABLE PROC_STATE (
|
||||
MSG_ID BIGINT NOT NULL PRIMARY KEY,
|
||||
STATE VARCHAR(16) NOT NULL, -- PENDING/FAILED/SUCCEEDED/SKIPPED/DEAD
|
||||
IDENTITY_KEY VARCHAR(200), -- SNDR|TYPE|STYP|SEQN(decode 后首次绑定;SEQN 同会话顺序观测 §5.5)
|
||||
ATTEMPTS INT NOT NULL DEFAULT 0,
|
||||
NEXT_ATTEMPT_AT TIMESTAMP(6) WITH TIME ZONE,
|
||||
ERROR_CLASS VARCHAR(20), -- MALFORMED/PROTOCOL/INFRA/UNSUPPORTED/EXHAUSTED(§9)
|
||||
LAST_ERROR VARCHAR(1000),
|
||||
UPDATED_AT TIMESTAMP(6) WITH TIME ZONE NOT NULL,
|
||||
CONSTRAINT uk_proc_identity UNIQUE (IDENTITY_KEY)
|
||||
);
|
||||
CREATE INDEX idx_proc_head ON PROC_STATE (STATE, MSG_ID); -- 主泵队头查询(严格 FIFO)
|
||||
|
||||
-- ③ 航班当前态主行:一行一 FLID(决策层权威;展示视图是投影,不是权威 §3.3)
|
||||
CREATE TABLE FLIGHT_SCHD (
|
||||
FLID VARCHAR(32) NOT NULL PRIMARY KEY, -- AODB 实例 ID,Number(1-12)(SIS §3.16.2)
|
||||
OPERATION_DAY DATE NULL, -- 运营保障日;一经确定不可变(§3.5);NULL=尚未被快照收录
|
||||
STATE VARCHAR(8) NOT NULL, -- ACTIVE/DELETED(§3.1,无第三态)
|
||||
STATE_VERSION BIGINT NOT NULL DEFAULT 0, -- 每次成功写入 +1(§4)
|
||||
LAST_MSG_ID BIGINT NULL, -- 最近一次成功写入的消息 ID
|
||||
-- ==== SCHD.FLTR 标量字段(值保持 AODB 字符串原样;缺失语义由处理层决定,§5.4)====
|
||||
ALCD VARCHAR(64) NULL, -- 航空公司代码
|
||||
ALSC VARCHAR(64) NULL, -- 航空公司简称
|
||||
FLNO VARCHAR(64) NULL, -- 航班号(展示用,不参与身份判定 §3.1)
|
||||
MVIN VARCHAR(64) NULL, -- 进离港标识(A/D)
|
||||
SODT VARCHAR(64) NULL, -- 计划运行时间(ddMMMyyHHmm;OPERATION_DAY 计算源 §3.5)
|
||||
FLTY VARCHAR(64) NULL, -- 航班类型
|
||||
FLIN VARCHAR(64) NULL, -- 国内/国际/混合
|
||||
ACFT VARCHAR(64) NULL, -- 机型
|
||||
RENO VARCHAR(64) NULL, -- 机尾号
|
||||
TAOP VARCHAR(64) NULL, -- 过站实际承运人代码(§3.4:过站关联,非代码共享)
|
||||
TAFL VARCHAR(64) NULL, -- 过站实际承运航班号
|
||||
TAID VARCHAR(64) NULL, -- 过站关联航班 FLID
|
||||
TRML VARCHAR(64) NULL, -- 航站楼
|
||||
MAXP VARCHAR(64) NULL, -- 最大旅客数
|
||||
CSOP VARCHAR(64) NULL, -- 共享承运人代码(§3.4)
|
||||
CSFT VARCHAR(64) NULL, -- 共享航班号
|
||||
MAID VARCHAR(32) NULL, -- 共享主航班 FLID
|
||||
ESTT VARCHAR(64) NULL, -- 预计时间
|
||||
ACTT VARCHAR(64) NULL, -- 实际时间
|
||||
STND VARCHAR(64) NULL, -- 备降站/机位
|
||||
PHAG VARCHAR(64) NULL, -- 地服代理(值机)
|
||||
CNCL VARCHAR(64) NULL, -- 取消时间(§8.1 历史判定依据)
|
||||
REMC VARCHAR(256) NULL, -- 备注
|
||||
BOTM VARCHAR(64) NULL, -- 摆渡车时间
|
||||
LACL VARCHAR(64) NULL, -- 行李确认时间
|
||||
FINT VARCHAR(64) NULL, -- 完成时间
|
||||
APPT VARCHAR(64) NULL, -- 旅客到达时间
|
||||
EGSR VARCHAR(64) NULL, -- 保障开始时间
|
||||
EGST VARCHAR(64) NULL, -- 保障结束时间
|
||||
FHAG VARCHAR(64) NULL, -- 地服代理(货运)
|
||||
MHAG VARCHAR(64) NULL, -- 地服代理(机务)
|
||||
VIPP VARCHAR(64) NULL, -- VIP 旅客数
|
||||
VIPR VARCHAR(64) NULL, -- VIP 等级
|
||||
LBNO VARCHAR(64) NULL, -- 行李件数
|
||||
LBWT VARCHAR(64) NULL, -- 行李重量
|
||||
PAXC VARCHAR(64) NULL, -- 旅客计数
|
||||
EXSC VARCHAR(64) NULL, -- 例外代码
|
||||
EXSR VARCHAR(256) NULL, -- 例外原因
|
||||
FTSS VARCHAR(64) NULL, -- 航班状态
|
||||
PEDT VARCHAR(64) NULL, -- 前序估计时间
|
||||
NAAT VARCHAR(64) NULL, -- 到港终态时间(§8.1;业务含义待术语表确认 §10)
|
||||
NEAT VARCHAR(64) NULL, -- 离港终态时间(§8.1;业务含义待术语表确认 §10)
|
||||
PADT VARCHAR(64) NULL, -- 旅客登机时间
|
||||
CREATED_AT TIMESTAMP(6) WITH TIME ZONE NOT NULL,
|
||||
UPDATED_AT TIMESTAMP(6) WITH TIME ZONE NOT NULL
|
||||
);
|
||||
CREATE INDEX idx_flight_schd_opday ON FLIGHT_SCHD (OPERATION_DAY);
|
||||
CREATE INDEX idx_flight_schd_state ON FLIGHT_SCHD (STATE);
|
||||
-- OPERATION_DAY 不可变的数据库层强化(§7.4):快照 upsert 一律带
|
||||
-- WHERE OPERATION_DAY IS NULL OR OPERATION_DAY = :day,行级条件更新即满足;
|
||||
-- 不使用触发器(Oracle/PG 双方言成本)。
|
||||
|
||||
-- ④ 资源明细表 ×8 + 路线点表(每 FLID 多行;明细集合按组先删后插 §3.3;
|
||||
-- ORDINAL 保留输入顺序,SOURCE_SEQ 只存上游序号 §3.2;
|
||||
-- 删除一律标记在主行 STATE,明细物理清除只发生在历史归档 §8.2)
|
||||
-- ④-1 登机门 GTDT
|
||||
CREATE TABLE FLIGHT_GATE (
|
||||
FLID VARCHAR(32) NOT NULL,
|
||||
ORDINAL INT NOT NULL,
|
||||
SOURCE_SEQ VARCHAR(64),
|
||||
GATE VARCHAR(64),
|
||||
PGOT VARCHAR(64), -- 计划登机开始
|
||||
PGCT VARCHAR(64), -- 计划登机结束
|
||||
GOTM VARCHAR(64), -- 实际登机开始
|
||||
GCTM VARCHAR(64), -- 实际登机结束
|
||||
GTYP VARCHAR(64),
|
||||
CREATED_AT TIMESTAMP(6) WITH TIME ZONE NOT NULL,
|
||||
UPDATED_AT TIMESTAMP(6) WITH TIME ZONE NOT NULL,
|
||||
PRIMARY KEY (FLID, ORDINAL)
|
||||
);
|
||||
-- ④-2 值机柜台 CKDT
|
||||
CREATE TABLE FLIGHT_CHECKIN (
|
||||
FLID VARCHAR(32) NOT NULL,
|
||||
ORDINAL INT NOT NULL,
|
||||
SOURCE_SEQ VARCHAR(64),
|
||||
CHKC VARCHAR(64),
|
||||
CCLS VARCHAR(64),
|
||||
PCOT VARCHAR(64), -- 计划开柜
|
||||
PCCT VARCHAR(64), -- 计划关柜
|
||||
COTM VARCHAR(64), -- 实际开柜
|
||||
CCTM VARCHAR(64), -- 实际关柜
|
||||
CTYP VARCHAR(64),
|
||||
CREATED_AT TIMESTAMP(6) WITH TIME ZONE NOT NULL,
|
||||
UPDATED_AT TIMESTAMP(6) WITH TIME ZONE NOT NULL,
|
||||
PRIMARY KEY (FLID, ORDINAL)
|
||||
);
|
||||
-- ④-3 行李转盘 CLDT
|
||||
CREATE TABLE FLIGHT_BELT (
|
||||
FLID VARCHAR(32) NOT NULL,
|
||||
ORDINAL INT NOT NULL,
|
||||
SOURCE_SEQ VARCHAR(64),
|
||||
BELT VARCHAR(64),
|
||||
BCLS VARCHAR(64),
|
||||
PCOT VARCHAR(64), -- 计划开转盘(转盘专属前缀,避免与柜台同名)
|
||||
PCCT VARCHAR(64), -- 计划关转盘
|
||||
FBAG VARCHAR(64), -- 首件行李
|
||||
LBAG VARCHAR(64), -- 末件行李
|
||||
BTYP VARCHAR(64),
|
||||
CREATED_AT TIMESTAMP(6) WITH TIME ZONE NOT NULL,
|
||||
UPDATED_AT TIMESTAMP(6) WITH TIME ZONE NOT NULL,
|
||||
PRIMARY KEY (FLID, ORDINAL)
|
||||
);
|
||||
-- ④-4 计划机位 PSDT
|
||||
CREATE TABLE FLIGHT_STAND_PLAN (
|
||||
FLID VARCHAR(32) NOT NULL,
|
||||
ORDINAL INT NOT NULL,
|
||||
SOURCE_SEQ VARCHAR(64),
|
||||
PSST VARCHAR(64),
|
||||
STST VARCHAR(64), -- 计划开始
|
||||
STET VARCHAR(64), -- 计划结束
|
||||
CREATED_AT TIMESTAMP(6) WITH TIME ZONE NOT NULL,
|
||||
UPDATED_AT TIMESTAMP(6) WITH TIME ZONE NOT NULL,
|
||||
PRIMARY KEY (FLID, ORDINAL)
|
||||
);
|
||||
-- ④-5 滑槽 CHDT
|
||||
CREATE TABLE FLIGHT_CHUTE (
|
||||
FLID VARCHAR(32) NOT NULL,
|
||||
ORDINAL INT NOT NULL,
|
||||
SOURCE_SEQ VARCHAR(64),
|
||||
CHUT VARCHAR(64),
|
||||
CHCLS VARCHAR(64),
|
||||
PCBT VARCHAR(64), -- 计划开始(SIS 线格式 PCBT)
|
||||
PCET VARCHAR(64), -- 计划结束(PCET)
|
||||
CBTM VARCHAR(64), -- 实际开始(CBTM)
|
||||
CETM VARCHAR(64), -- 实际结束(CETM)
|
||||
CHTYP VARCHAR(64),
|
||||
CREATED_AT TIMESTAMP(6) WITH TIME ZONE NOT NULL,
|
||||
UPDATED_AT TIMESTAMP(6) WITH TIME ZONE NOT NULL,
|
||||
PRIMARY KEY (FLID, ORDINAL)
|
||||
);
|
||||
-- ④-6 延误 DELY(业务上任意时刻仅 1 个有效延误,保留多行能力以无损承接)
|
||||
CREATE TABLE FLIGHT_DELAY (
|
||||
FLID VARCHAR(32) NOT NULL,
|
||||
ORDINAL INT NOT NULL,
|
||||
SOURCE_SEQ VARCHAR(64),
|
||||
CODE VARCHAR(64),
|
||||
STRT VARCHAR(64),
|
||||
DURA VARCHAR(64),
|
||||
REMC VARCHAR(256),
|
||||
CREATED_AT TIMESTAMP(6) WITH TIME ZONE NOT NULL,
|
||||
UPDATED_AT TIMESTAMP(6) WITH TIME ZONE NOT NULL,
|
||||
PRIMARY KEY (FLID, ORDINAL)
|
||||
);
|
||||
-- ④-7 靠撤桥 ABTM(桥号 ABDG;A/D 各一条)
|
||||
CREATE TABLE FLIGHT_BRIDGE_OP (
|
||||
FLID VARCHAR(32) NOT NULL,
|
||||
ORDINAL INT NOT NULL,
|
||||
SOURCE_SEQ VARCHAR(64),
|
||||
ABDG VARCHAR(64),
|
||||
ABOP VARCHAR(64), -- A=靠桥 D=撤桥
|
||||
AOTM VARCHAR(64), -- 动作时间
|
||||
CREATED_AT TIMESTAMP(6) WITH TIME ZONE NOT NULL,
|
||||
UPDATED_AT TIMESTAMP(6) WITH TIME ZONE NOT NULL,
|
||||
PRIMARY KEY (FLID, ORDINAL)
|
||||
);
|
||||
-- ④-8 轮挡 CHOT(机位 CHID;ON/OFF 各一条)
|
||||
CREATE TABLE FLIGHT_CHOCK_OP (
|
||||
FLID VARCHAR(32) NOT NULL,
|
||||
ORDINAL INT NOT NULL,
|
||||
SOURCE_SEQ VARCHAR(64),
|
||||
CHID VARCHAR(64),
|
||||
CHST VARCHAR(64), -- ON/OFF
|
||||
CHTM VARCHAR(64), -- 动作时间
|
||||
CREATED_AT TIMESTAMP(6) WITH TIME ZONE NOT NULL,
|
||||
UPDATED_AT TIMESTAMP(6) WITH TIME ZONE NOT NULL,
|
||||
PRIMARY KEY (FLID, ORDINAL)
|
||||
);
|
||||
-- ④-9 路线点 ROUT/ERUT 共用(ROUTE_KIND 区分 §3.2:10 类集合 9 张表)
|
||||
CREATE TABLE FLIGHT_ROUTE_POINT (
|
||||
FLID VARCHAR(32) NOT NULL,
|
||||
ORDINAL INT NOT NULL,
|
||||
SOURCE_SEQ VARCHAR(64),
|
||||
ROUTE_KIND VARCHAR(8) NOT NULL, -- ROUT/ERUT
|
||||
APCD VARCHAR(64), -- 机场代码
|
||||
SCAT VARCHAR(64), -- 计划到达时间
|
||||
SCDT VARCHAR(64), -- 计划出发时间
|
||||
CREATED_AT TIMESTAMP(6) WITH TIME ZONE NOT NULL,
|
||||
UPDATED_AT TIMESTAMP(6) WITH TIME ZONE NOT NULL,
|
||||
PRIMARY KEY (FLID, ROUTE_KIND, ORDINAL)
|
||||
);
|
||||
CREATE INDEX idx_flight_gate_flid ON FLIGHT_GATE (FLID);
|
||||
CREATE INDEX idx_flight_checkin_flid ON FLIGHT_CHECKIN (FLID);
|
||||
CREATE INDEX idx_flight_belt_flid ON FLIGHT_BELT (FLID);
|
||||
CREATE INDEX idx_flight_stand_flid ON FLIGHT_STAND_PLAN (FLID);
|
||||
CREATE INDEX idx_flight_chute_flid ON FLIGHT_CHUTE (FLID);
|
||||
CREATE INDEX idx_flight_delay_flid ON FLIGHT_DELAY (FLID);
|
||||
CREATE INDEX idx_flight_bridge_flid ON FLIGHT_BRIDGE_OP (FLID);
|
||||
CREATE INDEX idx_flight_chock_flid ON FLIGHT_CHOCK_OP (FLID);
|
||||
|
||||
-- ⑤ 统一投递事件 outbox(§7.3:KAFKA_MSG 只通知变化;KAFKA_SCHD 发整态;
|
||||
-- tombstone 仅在 ACTIVE→DELETED 时与删除同事务登记,投递失败持续重试)
|
||||
CREATE TABLE MSG_EVENT (
|
||||
EVENT_ID BIGSERIAL PRIMARY KEY,
|
||||
TARGET VARCHAR(30) NOT NULL, -- KAFKA_MSG / KAFKA_SCHD
|
||||
PARTITION_KEY VARCHAR(32) NOT NULL, -- 恒为 FLID
|
||||
EVENT_TYPE VARCHAR(16) NOT NULL DEFAULT 'UPSERT', -- UPSERT / TOMBSTONE
|
||||
STATE_VERSION BIGINT NOT NULL, -- 发布时航班版本;聚合按 FLID 取最新(§7.3)
|
||||
PAYLOAD_JSON TEXT NOT NULL, -- TOMBSTONE 时至少含 FLID/STATE_VERSION/DELETED
|
||||
STATE VARCHAR(16) NOT NULL, -- PENDING/SENT/DEAD
|
||||
ATTEMPTS INT NOT NULL DEFAULT 0,
|
||||
NEXT_ATTEMPT_AT TIMESTAMP(6) WITH TIME ZONE,
|
||||
ERROR_CLASS VARCHAR(20),
|
||||
LAST_ERROR VARCHAR(1000),
|
||||
CREATED_AT TIMESTAMP(6) WITH TIME ZONE NOT NULL
|
||||
);
|
||||
CREATE INDEX idx_evt_head ON MSG_EVENT (TARGET, STATE, EVENT_ID); -- 每 target 队头
|
||||
CREATE INDEX idx_evt_flid ON MSG_EVENT (PARTITION_KEY, STATE_VERSION); -- 同 FLID 未发事件合并
|
||||
|
||||
-- ⑥ 请求状态机(§7.1:只有 RESP 完成 RQFD 请求,按(运营日、发送方、请求类型)
|
||||
-- 匹配最新一条 PENDING;同类请求只留一条有效,新请求置旧为 EXPIRED)
|
||||
CREATE TABLE REQ_TRACK (
|
||||
REQ_ID BIGSERIAL PRIMARY KEY,
|
||||
REQ_TYPE VARCHAR(20) NOT NULL,
|
||||
OPERATION_DAY DATE NOT NULL, -- 请求覆盖运营日
|
||||
SENDER VARCHAR(64) NOT NULL, -- 请求发送方(匹配键之一)
|
||||
STATE VARCHAR(16) NOT NULL, -- PENDING/SENT/DONE/EXPIRED
|
||||
COUTMSGS_ID BIGINT,
|
||||
SENT_AT TIMESTAMP(6) WITH TIME ZONE,
|
||||
COMPLETED_AT TIMESTAMP(6) WITH TIME ZONE,
|
||||
CREATED_AT TIMESTAMP(6) WITH TIME ZONE NOT NULL
|
||||
);
|
||||
CREATE INDEX idx_req_open ON REQ_TRACK (REQ_TYPE, OPERATION_DAY, SENDER, STATE);
|
||||
|
||||
-- ⑦ 共享信箱回填补偿待办(§7.2:提交后回填;回填失败不得把 SUCCEEDED 改回 FAILED;
|
||||
-- 目标形态 = 业务事务内预登记,消除「提交后写待办」的崩溃窗口,§10 当前偏差)
|
||||
CREATE TABLE BACKFILL_TODO (
|
||||
MSG_ID BIGINT NOT NULL PRIMARY KEY,
|
||||
SNDR VARCHAR(64) NOT NULL,
|
||||
TYPE VARCHAR(32) NOT NULL,
|
||||
STYP VARCHAR(32),
|
||||
SEQN BIGINT,
|
||||
ATTEMPTS INT NOT NULL DEFAULT 0,
|
||||
NEXT_ATTEMPT_AT TIMESTAMP(6) WITH TIME ZONE NOT NULL,
|
||||
LAST_ERROR VARCHAR(512),
|
||||
CREATED_AT TIMESTAMP(6) WITH TIME ZONE NOT NULL,
|
||||
UPDATED_AT TIMESTAMP(6) WITH TIME ZONE NOT NULL
|
||||
);
|
||||
CREATE INDEX idx_backfill_todo_due ON BACKFILL_TODO (NEXT_ATTEMPT_AT);
|
||||
|
||||
-- ⑧ SCHD 快照留痕(§5.5):事务外追加,只追加留痕、不参与决策;一行=一次尝试,重放也记;
|
||||
-- RESULT 与 FLAGS 分列(可「成功且告警」);写失败只记指标;保留 90 天,按 (SCOPE_END, RECV_AT) 清理
|
||||
CREATE TABLE SCHD_SNAP_LOG (
|
||||
LOG_ID BIGSERIAL PRIMARY KEY,
|
||||
MSG_ID BIGINT NOT NULL,
|
||||
RECV_AT TIMESTAMP(6) WITH TIME ZONE NOT NULL, -- 接收时刻(UTC)
|
||||
SCOPE_START DATE NOT NULL, -- 报文覆盖运营日范围(单日时两者相等)
|
||||
SCOPE_END DATE NOT NULL,
|
||||
RECS INT NOT NULL, -- 报文声明记录数
|
||||
UPSERTED INT NOT NULL, -- 实际写入数
|
||||
DURATION_MS BIGINT NOT NULL,
|
||||
RESULT VARCHAR(20) NOT NULL, -- COMMITTED/REPLAY_SKIPPED/ROLLED_BACK
|
||||
FLAGS VARCHAR(200) NOT NULL DEFAULT '', -- 逗号分隔:EMPTY/RECS_DROP/SEQN_REGRESSION/DAY_MISMATCH/SCHD_REVIVE_CONFLICT
|
||||
ARCHIVE_KEY VARCHAR(200), -- 原文归档引用(证据层,尚未交付)
|
||||
CREATED_AT TIMESTAMP(6) WITH TIME ZONE NOT NULL
|
||||
);
|
||||
CREATE INDEX idx_snaplog_cleanup ON SCHD_SNAP_LOG (SCOPE_END, RECV_AT);
|
||||
CREATE INDEX idx_snaplog_msg ON SCHD_SNAP_LOG (MSG_ID);
|
||||
@@ -13,12 +13,11 @@ Flyway 配置**;PG 路径使用 `classpath:db/migration`,两者互不混用
|
||||
|
||||
## 计划内容
|
||||
|
||||
- V1.0.0 起:管道表(PROC_STATE/MSG_EVENT/PUMP_JOB/REQ_TRACK/REF_MASTER/PIPELINE_LOCK)
|
||||
的 11g DDL——`NUMBER`/序列、`TIMESTAMP WITH TIME ZONE`、`VARCHAR2` BYTE/CHAR 语义钉死。
|
||||
- FLIGHT_SCHD 宽表 + V1.3.0 等价明细表 DDL(无 `ON CONFLICT`/`LATERAL` 依赖)。
|
||||
- `SRVT_TEXT/VIPF_TEXT/MAFL_TEXT` 映射 `CLOB`(PG 为 TEXT)。
|
||||
- `flight_schd_display` 11g 版视图(无 LATERAL,用标量子查询)。
|
||||
- V1 起:`V1__flight_state_baseline.sql` 的 11g 等价 DDL——
|
||||
PIPELINE_LOCK/PROC_STATE/MSG_EVENT/REQ_TRACK/BACKFILL_TODO/FLIGHT_SCHD + 9 张明细表/SCHD_SNAP_LOG;
|
||||
`NUMBER`/序列替代 `BIGSERIAL`、`TIMESTAMP WITH TIME ZONE`、`VARCHAR2` BYTE/CHAR 语义钉死。
|
||||
- JdbcFlightStateRepository 的 `INSERT ... ON CONFLICT` 改 MERGE(OPERATION_DAY 不可变条件 §7.4)。
|
||||
- 空串按 NULL 的语义回归:命令层 presence 信息不得被 11g 空串语义吞掉
|
||||
(docs/flight-state.md §5)。
|
||||
(docs/flight-state.md §5/§10)。
|
||||
|
||||
版本号与 PG location 各自独立推进,禁止复用版本号语义。
|
||||
|
||||
Reference in New Issue
Block a user