-- 0009 · init.sql 과 어긋난 것을 맞춘다 -- -- init.sql 은 새 DB 만, migrations 는 기존 DB 만 본다. 둘이 갈리면 새로 세운 DB 가 -- 옛 구조로 선다 — 그래서 여기서 한 번 맞춘다. -- ── 1. 없는 인덱스 (실사용에 영향) ────────────────────────────────────── -- 0003 이 기존 DB 에 site_contents 를 만들 때 유니크(uq_site_contents_section)만 걸고 -- place 조회용 인덱스를 빠뜨렸다. init.sql 에는 처음부터 있었으므로 **새 DB 에만 있고 -- 기존 DB 에는 없는** 상태였다 — 사이트 하나의 섹션을 읽을 때마다 시퀀셜 스캔이다. CREATE INDEX IF NOT EXISTS idx_site_contents_site ON public.site_sections (site_id); -- ── 2. 컬럼 폭 (ORM 과 불일치) ────────────────────────────────────────── -- ORM 은 String(64) 인데 DB 는 VARCHAR(32) 였다. 지금 쓰는 카카오 place id 는 8~10자라 -- 아직 안 터졌지만, 다른 출처(네이버·TourAPI)의 id 를 넣는 날 잘려 들어간다 — -- 잘린 id 는 "동일 업소 판정" 을 조용히 틀리게 만드는 종류다. ALTER TABLE public.places ALTER COLUMN external_place_id TYPE VARCHAR(64); -- ── 3. 옛 이름이 남은 PK 제약 ─────────────────────────────────────────── -- `ALTER TABLE ... RENAME TO` 는 제약 이름을 따라 바꾸지 않는다. 그래서 0005 이후로 -- `place_facts` 의 PK 가 `facts_pkey` 로 남아 있었다. 동작에는 영향이 없지만, -- 스키마를 덤프해 비교할 때마다 "새 DB 와 기존 DB 가 다르다" 로 보인다 — -- 진짜 차이를 찾는 눈을 가리는 잡음이라 지금 맞춰 둔다. ALTER INDEX IF EXISTS public.facts_pkey RENAME TO place_facts_pkey; ALTER INDEX IF EXISTS public.faqs_pkey RENAME TO place_faqs_pkey; ALTER INDEX IF EXISTS public.media_pkey RENAME TO place_photos_pkey; ALTER INDEX IF EXISTS public.units_pkey RENAME TO place_units_pkey; ALTER INDEX IF EXISTS public.place_links_pkey RENAME TO place_channels_pkey; ALTER INDEX IF EXISTS public.local_contents_pkey RENAME TO area_contents_pkey; ALTER INDEX IF EXISTS public.place_contents_pkey RENAME TO place_area_refs_pkey; ALTER INDEX IF EXISTS public.site_contents_pkey RENAME TO site_sections_pkey; ALTER INDEX IF EXISTS public.publish_logs_pkey RENAME TO site_publish_logs_pkey; -- 0004 가 place_contents 를 새로 만들면서 붙은 번호(_pkey1). 위 이름이 이미 비어 있으면 -- 이쪽이 진짜 PK 다. ALTER INDEX IF EXISTS public.place_contents_pkey1 RENAME TO place_area_refs_pkey; -- ★ 인덱스 이름은 바꾸지 않는다(idx_facts_place · uq_place_links_place_url …). -- ORM 의 __table_args__ 가 그 이름을 들고 있어서, 여기서 바꾸면 ORM 도 같이 고쳐야 하고 -- 그 사이에 같은 인덱스가 두 벌 생긴다. 제약 이름과 달리 이건 코드가 참조한다.