Files
Agent-System/deploy/postgres/migrations/2026-09-10-chat-messages-day-window.sql
T

34 lines
1.6 KiB
SQL

-- =============================================================================
-- Migration: 2026-09-10-chat-messages-day-window.sql
-- Description: 为 chat_messages 新增按日分片列 day_key、消息分类 category 与软删除 deleted_at
-- =============================================================================
-- 1. 结构变更:新增列
ALTER TABLE chat_messages
ADD COLUMN IF NOT EXISTS day_key DATE,
ADD COLUMN IF NOT EXISTS category TEXT NOT NULL DEFAULT 'uncategorized',
ADD COLUMN IF NOT EXISTS deleted_at TIMESTAMPTZ;
-- 2. 索引优化:窗口与分类快速定位
CREATE INDEX IF NOT EXISTS idx_chat_messages_sid_day_id
ON chat_messages(session_id, day_key DESC, id DESC);
CREATE INDEX IF NOT EXISTS idx_chat_messages_sid_category
ON chat_messages(session_id, category, id DESC);
-- 3. 存量数据幂等回填
UPDATE chat_messages
SET day_key = (created_at AT TIME ZONE 'Asia/Shanghai')::date
WHERE day_key IS NULL;
UPDATE chat_messages SET category = CASE
WHEN metadata ? 'milestone' AND (metadata->>'milestone')::boolean = true THEN 'milestone'
WHEN intent IN ('CASUAL_CHAT') THEN 'casual'
WHEN intent IN ('QUERY_PROGRESS','QUERY_REGULATIONS','SUPPLEMENT_INFO','AMBIGUOUS_FALLBACK') THEN 'consult'
WHEN intent IN ('TRIGGER_TASK','ADVANCE_STAGE') OR metadata ? 'task_request' THEN 'task'
WHEN intent LIKE 'DOCGOV%' OR metadata ? 'interactive_card' THEN 'review'
WHEN metadata ? 'attachments' OR metadata ? 'file_op' THEN 'file'
WHEN role = 'system' THEN 'system'
ELSE 'uncategorized' END
WHERE category = 'uncategorized' OR category = '';