Skip to content

db(prod): warehouse 스키마 드롭 + 엔티티 public 이관 #335

@cocoyoon

Description

@cocoyoon

Part of #333.

Scope

prod Supabase에서 `warehouse` 스키마를 완전 제거하고, 검증된 엔티티 테이블을 `public.*`로 옮긴다.

Pre-flight (반드시 먼저)

```sql
SELECT conname, conrelid::regclass, confrelid::regclass
FROM pg_constraint
WHERE confrelid::regclass::text LIKE 'warehouse.%';
```

  • prod에서 실행 → 모든 cross-schema FK를 나열
  • 결과를 아래 마이그레이션 2/4 스텝에 누락 없이 반영
  • `SELECT count(*)` 로 각 드롭 대상 테이블(seed_posts, images, instagram_accounts, posts_legacy 등) 실데이터 여부 확인, 있으면 이관 계획 별도 수립

Deliverables

  • `supabase/migrations/20260425_000001_drop_warehouse_and_promote_entities.sql` — 단일 트랜잭션
    1. 파이프라인/레거시 테이블 DROP CASCADE: raw_posts, raw_post_sources, seed_posts, seed_spots, seed_asset, images, instagram_accounts, posts
    2. `public.posts`의 cross-schema FK 제거 (pre-flight 결과 전부)
    3. `ALTER TABLE warehouse. SET SCHEMA public` for artists, groups, brands, group_members, admin_audit_log
    4. FK 재생성 (public.* 대상)
    5. `DROP SCHEMA warehouse CASCADE`
  • SeaORM mirror 삭제: `packages/api-server/migration/src/m20260419_000001_create_raw_posts_tables.rs`, `m20260420_000001_add_initial_scraped_at_to_raw_post_sources.rs`
  • `packages/api-server/migration/src/lib.rs`에서 두 마이그레이션 등록 제거

Acceptance

  • 로컬에서 `just dev-reset` 성공 (`\\dt warehouse.*` 결과 empty)
  • `public.posts`가 `public.artists`/`public.groups`에 FK 연결
  • 기존 insert/select 쿼리들 (artist/group 이름 기반 resolve 포함) 정상 동작

Depends on

Rollback

  • Supabase PITR 7일 보관. step 2 직전 수동 snapshot 트리거.
  • 실패 시 단일 트랜잭션이므로 롤백 자동.

Metadata

Metadata

Assignees

No one assigned

    Labels

    data데이터/DBpriority: high아키텍처 안정화 단계refactor리팩토링

    Type

    No type
    No fields configured for issues without a type.

    Projects

    Status

    Done

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions