fix(queue): migration을 단일 statement 파일 3개로 분리
asyncpg prepare가 다중 statement 불가. 117(stale 정리) → 118(constraint 제거) → 119(partial unique index 생성) 순차 실행. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -1,18 +1,8 @@
|
|||||||
-- Step 1: stale duplicate 삭제 (processing 10분+ 방치 + 같은 doc/stage에 pending 존재)
|
-- stale duplicate 삭제 (processing 10분+ 방치 + 같은 doc/stage에 pending 존재)
|
||||||
DELETE FROM processing_queue a
|
DELETE FROM processing_queue a
|
||||||
USING processing_queue b
|
USING processing_queue b
|
||||||
WHERE a.document_id = b.document_id
|
WHERE a.document_id = b.document_id
|
||||||
AND a.stage = b.stage
|
AND a.stage = b.stage
|
||||||
AND a.status = 'processing'
|
AND a.status = 'processing'
|
||||||
AND a.started_at < NOW() - INTERVAL '10 minutes'
|
AND a.started_at < NOW() - INTERVAL '10 minutes'
|
||||||
AND b.status = 'pending';
|
AND b.status = 'pending'
|
||||||
|
|
||||||
-- Step 2: 기존 constraint 제거
|
|
||||||
ALTER TABLE processing_queue
|
|
||||||
DROP CONSTRAINT processing_queue_document_id_stage_status_key;
|
|
||||||
|
|
||||||
-- Step 3: partial unique index (활성 행은 (document_id, stage)당 최대 1개)
|
|
||||||
-- 활성 중복이 남아있으면 여기서 자연스럽게 실패 → 수동 정리 후 재시도
|
|
||||||
CREATE UNIQUE INDEX uq_queue_active
|
|
||||||
ON processing_queue (document_id, stage)
|
|
||||||
WHERE status IN ('pending', 'processing');
|
|
||||||
|
|||||||
@@ -0,0 +1,2 @@
|
|||||||
|
ALTER TABLE processing_queue
|
||||||
|
DROP CONSTRAINT processing_queue_document_id_stage_status_key
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
-- partial unique index: 활성 행(pending/processing)은 (document_id, stage)당 최대 1개
|
||||||
|
-- 활성 중복이 남아있으면 여기서 자연스럽게 실패 -> 수동 정리 후 재시도
|
||||||
|
CREATE UNIQUE INDEX uq_queue_active
|
||||||
|
ON processing_queue (document_id, stage)
|
||||||
|
WHERE status IN ('pending', 'processing')
|
||||||
Reference in New Issue
Block a user