-- ===================================================================== -- 自有 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) );