34 lines
1.6 KiB
SQL
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 = '';
|