Files
Hyungi Ahn fe26aadb27 fix(canonical): split Phase 1A migrations into single-statement files (211-219)
asyncpg exec_driver_sql 의 prepared statement 제약상 multi-statement 파일은
"cannot insert multiple commands into a prepared statement" 에러로 적용 실패.
규칙: 한 migration = 한 statement (다중 ADD COLUMN 절은 단일 statement 라 허용,
인덱스/CHECK/CREATE TABLE 은 별도 파일).

이전 cee01af 의 211_md_canonical_layer.sql (6 statements) + 212_document_lineage.sql
(3 statements) 을 9 파일로 분할:
  211 ALTER TABLE documents ADD COLUMN x13
  212 ADD CONSTRAINT documents_md_draft_status_only_ai
  213 idx_documents_md_status_pending
  214 idx_documents_content_origin
  215 idx_documents_md_frontmatter_gin (선제 인덱스)
  216 idx_documents_md_draft_status
  217 CREATE TABLE document_lineage
  218 idx_document_lineage_source
  219 idx_document_lineage_derived

dry-run 재검증: 13 cols / 28 doc idx / 4 lineage idx PASS.
계획 변경 없음 — schema 결과 동일, 적용 단위만 분할.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-30 01:57:11 +00:00

26 lines
1.7 KiB
SQL

-- 211_md_columns.sql
-- Phase 1A: documents 테이블에 markdown canonical layer 컬럼 13개 추가.
-- Plan: ~/.claude/plans/plan-idempotent-sundae.md (round 3)
--
-- asyncpg exec_driver_sql 단일 prepared statement 제약 — ALTER TABLE 다중 ADD COLUMN
-- 절은 단일 statement 라 허용. 인덱스/CHECK/CREATE TABLE 은 별도 파일 (212~219).
-- PG 16.13: ADD COLUMN ... DEFAULT <constant> 는 fast path (table rewrite 없음).
ALTER TABLE documents
ADD COLUMN IF NOT EXISTS md_content TEXT,
ADD COLUMN IF NOT EXISTS md_frontmatter JSONB NOT NULL DEFAULT '{}'::jsonb,
ADD COLUMN IF NOT EXISTS md_format_version TEXT NOT NULL DEFAULT '1.0',
ADD COLUMN IF NOT EXISTS md_status TEXT NOT NULL DEFAULT 'pending'
CHECK (md_status IN ('pending','processing','success','partial','failed','skipped')),
ADD COLUMN IF NOT EXISTS md_extraction_engine TEXT,
ADD COLUMN IF NOT EXISTS md_extraction_engine_version TEXT,
ADD COLUMN IF NOT EXISTS md_extraction_quality JSONB,
ADD COLUMN IF NOT EXISTS md_extraction_error TEXT,
ADD COLUMN IF NOT EXISTS md_content_hash TEXT,
ADD COLUMN IF NOT EXISTS md_source_hash TEXT,
ADD COLUMN IF NOT EXISTS md_generated_at TIMESTAMPTZ,
ADD COLUMN IF NOT EXISTS content_origin TEXT NOT NULL DEFAULT 'extracted'
CHECK (content_origin IN ('extracted','manual','ai_drafted','imported')),
ADD COLUMN IF NOT EXISTS md_draft_status TEXT
CHECK (md_draft_status IS NULL OR md_draft_status IN ('draft','pending_review','approved','revised','rejected'));