Files
hyungi_document_server/migrations/217_document_lineage.sql
T
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

20 lines
999 B
SQL

-- 217_document_lineage.sql
-- Phase 1A: AI 생성 문서가 어느 원본에서 파생됐는지 추적.
--
-- 이력 테이블 FK = ON DELETE RESTRICT (feedback_history_table_fk_restrict).
-- 부모 문서 hard delete 차단, soft delete (documents.deleted_at) 만 허용.
CREATE TABLE IF NOT EXISTS document_lineage (
id BIGSERIAL PRIMARY KEY,
source_document_id BIGINT NOT NULL REFERENCES documents(id) ON DELETE RESTRICT,
derived_document_id BIGINT NOT NULL REFERENCES documents(id) ON DELETE RESTRICT,
relation_type TEXT NOT NULL
CHECK (relation_type IN ('cited','summarized_from','generated_from','revised_from')),
metadata JSONB NOT NULL DEFAULT '{}'::jsonb,
created_at TIMESTAMPTZ NOT NULL DEFAULT now(),
CONSTRAINT document_lineage_no_self
CHECK (source_document_id <> derived_document_id),
CONSTRAINT document_lineage_uq
UNIQUE (source_document_id, derived_document_id, relation_type)
);