supabase CLI로 db 복제

cheese_story·2026년 1월 15일
post-thumbnail

0. 준비

  • Supabase 계정
  • Supabase CLI 설치
    1️⃣ Scoop 설치 (한 번만)
    Set-ExecutionPolicy -Scope CurrentUser RemoteSigned
    irm get.scoop.sh | iex
    
    2️⃣ Supabase CLI 설치
    scoop install supabase
    
    3️⃣ 확인
    supabase --version
  • PostgreSQL 설치
  • Docker Desktop 설치 및 실행: 
    Supabase CLI는 내부적으로 Docker를 사용하므로, Docker Desktop을 설치,
    이후 백업 진행 중일 때 무조건 Docker 실행 상태를 유지해야 한다.

백업 진행 중 Docker image 관련 에러가 뜨면 → Docker Desktop 실행 후 재시도

  • 복제 대상(Target) 프로젝트 생성: Supabase 대시보드에서 비어있는 새 프로젝트를 미리 생성
  • 로그인
supabase login

1. 새 Supabase 프로젝트 만들기 (복제 대상)

  • New project
  • 이름: my-project-clone (아무거나)
  • Region: 원본이랑 같은 지역 추천
  • DB password: 안전하게 저장

⚠️ 이 프로젝트는 완전 빈 DB여야 함

2. 원본 프로젝트 정보 확인

Dashboard → Settings → General

  • Project Ref (이젠 project id임) 복사해두기 예: abcd1234
  • 원본 프로젝트와 연결하기 supabase link --project-ref [my-project id]

3. 원본 DB 덤프 뜨기 (READ ONLY)

접근 권한 가능한 경로에 새로운 폴더 생성, 그 폴더에서 다음 명령어 수행
( powershell 말고 cmd 에서 열기, 한글 인코딩 문제 방지 )

// 스키마 dump
supabase db dump > dump.sql

// **방법1. 데이터만 dump**
supabase db dump --data-only > data.sql
// **방법2. 데이터만 dump**
// supabase 대시보드에서 직접 export sql 해오기

4. (방법1로 하는 경우) data.sql 안전 처리

sql 맨 위에 있는지 확인(없으면 추가)

-- ===== Supabase SAFE CLONE =====
SET row_security= off;
SET session_replication_role= replica;

sql 맨 아래에 있는지 확인(없으면 추가)

-- ===== RESTORE END =====
SET session_replication_role=DEFAULT;
RESET row_security;

이걸 안 하면 RLS 때문에 restore 중 터질 확률 높음

5. 복제 대상 프로젝트로 백업

1.방법1로 한 경우
접근 권한 가능한 경로에 새로운 폴더 생성, 그 폴더에서 다음 명령어 수행

supabase db restore clone.sql --project-ref CLONE_PROJECT_REF

2.방법2로 한 경우
supabase 대시보드 SQL Editor에서 직접 실행하기

  1. 스키마 dump 하기
  2. 생성된 sql파일 안의 내용을 supabase의 SQL Editor에서 복사 붙여넣기
  3. RUN
    그 결과, 테이블 생성, 키 관계 생성, RPC 생성, enum 이런 거 생성됨
  4. 데이터들은 supabase 대시보드에서 직접 export sql 해와서 그거 에디터에 실행하기

(ERROR 발생) SQL문 정제 작업이 필요한 테이블들이 있음

supabase에서 sql문 export 해온 걸 editor에 그대로 사용하면 에러가 날 수 있음

주로 큰따옴표를 인식하지 못해 생기는 에러이다.
SQL문과 Postgre의 문법 차이인데,
Postgre는 문자열로 작은따옴표(’’)만 인식하는데 SQL문에는 큰따옴표(””)로 되어 있어 에러가 생긴다.

해결 방법 : vsc에서 작은따옴표로 변경하기

ARRAY안에 있는 큰따옴표 문자열을 작은따옴표로 변경해야 할 때
ARRAY안에 문자열(초록색)으로 인식되어야 함

3번 반복
ctrl+f 로 “가 있는 곳을 찾고, alt+enter로 “가 있는 곳 전체를 바꾼다.

  • 찾기
ARRAY[
  • 바꾸기
ARRAY['
  • 찾기
","
  • 바꾸기
','
  • 찾기
"]
  • 바꾸기
']

6. 무료 플랜 주의사항

7일간 요청 없으면 프로젝트 pause 되기 때문에 주기적으로 들어와서 데이터 확인


DB 백업 시 다른 것들도 다 복제가 되나?

다음을 전부 포함한다.

  • tables
  • data
  • indexes
  • functions (RPC)
  • triggers
  • views
  • policies
  • RLS 설정

아래 항목들은 대상 프로젝트의 대시보드에서 직접 설정해야 한다.

  • 스토리지 파일(Storage Objects): 데이터베이스 스키마 복원으로 버킷(Bucket) 정보는 생성되지만, 버킷 안의 실제 파일들은 옮겨지지 않습니다. 파일을 수동으로 다운로드하여 새 프로젝트에 업로드해야 합니다.
  • 프로젝트 설정: API 키, Auth 설정(로그인 제공자, 이메일 템플릿), 웹훅(Webhooks), 실시간(Realtime) 설정 등을 원본 프로젝트와 동일하게 구성해야 합니다.
  • Edge Functions: 작성한 Edge Function이 있다면 supabase functions deploy 명령어를 통해 대상 프로젝트에 새로 배포해야 합니다.
profile
안녕하세요

0개의 댓글