36fea2789a
asyncpg 의 prepared statement 가 multi-statement 불허. Phase 4 101 SQL 은 2026-04-08 적용 당시엔 통과했지만 현재 asyncpg/sqlalchemy 버전에서 fail. 255_morning_briefings_table.sql CREATE TABLE morning_briefings 256_morning_briefings_idx.sql CREATE INDEX (briefing_date) 257_briefing_topics_table.sql CREATE TABLE briefing_topics + UNIQUE 258_briefing_topics_idx.sql CREATE INDEX (briefing_id, topic_rank)
27 lines
1.3 KiB
SQL
27 lines
1.3 KiB
SQL
-- Morning Briefing 자식 (topic_rank 순, UNIQUE briefing_id + topic_rank).
|
|
-- country_perspectives/divergences/convergences/key_quotes JSONB (cap 은 application).
|
|
-- historical_* 3 컬럼은 BRIEFING_HISTORICAL_ENABLED on 시만 채움 (nullable).
|
|
CREATE TABLE briefing_topics (
|
|
id BIGSERIAL PRIMARY KEY,
|
|
briefing_id BIGINT NOT NULL REFERENCES morning_briefings(id) ON DELETE CASCADE,
|
|
topic_rank INTEGER NOT NULL,
|
|
topic_label VARCHAR(120) NOT NULL,
|
|
headline TEXT NOT NULL,
|
|
country_perspectives JSONB NOT NULL DEFAULT '[]',
|
|
divergences JSONB NOT NULL DEFAULT '[]',
|
|
convergences JSONB NOT NULL DEFAULT '[]',
|
|
key_quotes JSONB NOT NULL DEFAULT '[]',
|
|
historical_article_ids JSONB,
|
|
historical_context TEXT,
|
|
historical_window_days INTEGER,
|
|
cluster_members JSONB NOT NULL DEFAULT '[]',
|
|
article_count INTEGER NOT NULL,
|
|
country_count INTEGER NOT NULL,
|
|
importance_score DOUBLE PRECISION NOT NULL,
|
|
raw_weight_sum DOUBLE PRECISION NOT NULL,
|
|
llm_model VARCHAR(100),
|
|
llm_fallback_used BOOLEAN NOT NULL DEFAULT FALSE,
|
|
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
|
UNIQUE (briefing_id, topic_rank)
|
|
)
|