-- 0007 · 지역 이야기 다섯 종이 한 지역에 나란히 설 수 있게 한다 -- -- `uq_local_contents_single (region_code, content_type) WHERE external_id IS NULL` 은 -- **날씨**를 위해 만든 인덱스다 — 날씨는 출처 id 가 없고 지역당 한 행이면 된다. -- 그런데 지역 이야기도 external_id 가 없다(유일성의 근거가 `kind` 다). 그래서 같은 지역의 -- 가요·인물·연표·엽서·퀴즈 다섯이 `(region_code, content_type=6)` 하나를 두고 부딪친다 — -- 실측(2026-09-09, 52군산시): 생성은 54건 다 됐는데 저장은 첫 종류만 들어가고 나머지 넷이 -- unique 위반으로 떨어졌다. 잡은 "성공"으로 끝나고 화면만 비어 있다 — 조용히 틀리는 종류다. -- -- 고치는 방향: `single` 은 **kind 가 없는 행**(=날씨)에만 건다. 이야기의 유일성은 -- 0004 가 만든 `uq_local_contents_kind (region_code, kind)` 가 이미 책임진다. -- 인덱스 둘이 같은 행을 두고 다투지 않게, 각자 자기 몫만 보게 가른다. DROP INDEX IF EXISTS public.uq_local_contents_single; CREATE UNIQUE INDEX IF NOT EXISTS uq_local_contents_single ON public.area_contents (region_code, content_type) WHERE deleted = FALSE AND external_id IS NULL AND kind IS NULL;