Files
creator-hub/internal/environment/migrations/1032_douyin_release_remediation.sql
T
rogee 0879d9fd25 refactor(schema): 迁移 043 schema 收敛——42→19 张表,统一迁移 runner
- 迁移 043 一次到位:runtime_instance/environment_binding 并入 browser_env(账号即环境)、
  credential_reference 并入 social_account、work_source/metric_plan 并入 creator_work、
  sync 租约并入 creator_collection_checkpoint(kind='sync')、audit_event 瘦列、
  creator_settings 去转写列、TRUNCATE 账号域(竞品采集数据无损保留)
- 统一迁移 runner:environment.Open 串起 001 账号基座 + hub 链 + 038 creator 版本回填
  (v+1000) + creator 1017-1042 + 043;account/creator Open 不再迁移
- 三域 store SQL 全量适配:CreateBoundEnv 就绪门禁、SetRuntimeCleanupPending fence
  语义(未知代 MissingRuntimeID 允许登记并释放活跃实例)、metric_plan 列并入 work、
  checkpoint sync 租约、deletion 链路重写
- api 适配:envView 去 runtime_instance_id、audit filter 去任务列、browser_env 单表查询
- 测试:迁移 043 形态探针、迁移不可变映射新路径、legacy 迁移重放子测试重写、
  fence/出口生命周期/单来源 upsert 语义覆盖;CREATORHUB_POSTGRES_TEST_URL 全绿,
  environment 70%/creator 67.5% 覆盖率,tsc 通过
2026-09-28 19:48:55 +08:00

53 lines
2.5 KiB
SQL

ALTER TABLE creator_event
ADD COLUMN IF NOT EXISTS generation text NOT NULL DEFAULT '';
ALTER TABLE creator_operation
ADD COLUMN IF NOT EXISTS verification_state text NOT NULL DEFAULT 'not_verified'
CHECK (verification_state IN ('not_verified', 'not_sent', 'succeeded', 'failed', 'blocked', 'uncertain')),
ADD COLUMN IF NOT EXISTS verification_evidence jsonb NOT NULL DEFAULT '{}'::jsonb,
ADD COLUMN IF NOT EXISTS verified_at timestamptz;
ALTER TABLE creator_message
ADD COLUMN IF NOT EXISTS operation_id text REFERENCES creator_operation(id) ON DELETE SET NULL;
CREATE INDEX IF NOT EXISTS creator_message_operation_idx ON creator_message (operation_id);
ALTER TABLE creator_conversation
ADD COLUMN IF NOT EXISTS history_cursor text NOT NULL DEFAULT '',
ADD COLUMN IF NOT EXISTS history_has_more boolean NOT NULL DEFAULT false,
ADD COLUMN IF NOT EXISTS history_synced_at timestamptz;
ALTER TABLE creator_material_job
ADD COLUMN IF NOT EXISTS processing_step text NOT NULL DEFAULT '',
ADD COLUMN IF NOT EXISTS processing_token text NOT NULL DEFAULT '',
ADD COLUMN IF NOT EXISTS processing_started_at timestamptz;
CREATE TABLE IF NOT EXISTS creator_event_strategy_trace (
id bigint GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
event_id text NOT NULL REFERENCES creator_event(id) ON DELETE CASCADE,
strategy_id text NOT NULL,
position integer NOT NULL CHECK (position > 0),
outcome text NOT NULL CHECK (outcome IN ('skipped', 'selected')),
reason text NOT NULL DEFAULT '',
created_at timestamptz NOT NULL DEFAULT now()
);
CREATE INDEX IF NOT EXISTS creator_event_strategy_trace_idx
ON creator_event_strategy_trace (event_id, position, id);
CREATE TABLE IF NOT EXISTS creator_listener_boundary (
id bigint GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
account_id text NOT NULL REFERENCES social_account(id) ON DELETE CASCADE,
platform text NOT NULL CHECK (platform IN ('douyin', 'xiaohongshu')),
generation text NOT NULL,
status text NOT NULL CHECK (status IN ('starting', 'ready', 'gap', 'stopped', 'error')),
boundary_at timestamptz,
last_delivery_id text NOT NULL DEFAULT '',
reason text NOT NULL DEFAULT '',
recorded_at timestamptz NOT NULL DEFAULT now()
);
CREATE INDEX IF NOT EXISTS creator_listener_boundary_account_idx
ON creator_listener_boundary (account_id, recorded_at, id);
ALTER TABLE creator_listener_state
ADD COLUMN IF NOT EXISTS session_token text NOT NULL DEFAULT '',
ADD COLUMN IF NOT EXISTS invalidated boolean NOT NULL DEFAULT false;