Supabase DB 복사하기 ‐ 허혜민 - Team-HGD/SniffMEET GitHub Wiki
작업 내역
백로그
supabase DB 변경
기존 프로젝트 DB Dump 뜨기
1. Supabase CLI 다운로드
brew install supabase/tap/supabase
아래 명령어는 도커 클라이언트만 다운로드 받는 명령어입니다.
brew install docker
brew install docker-compose
아래 링크에서 컴퓨터 상황에 맞게 도커 서버 앱도 설치해줍니다.
https://docs.docker.com/desktop/setup/install/mac-install/
도커 클라이언트와 도커 서버(도커 앱)을 모두 다운 받아야 합니다.
도커 클라이언트만 다운로드 받으면 dump 시 아래와 같은 에러가 발생합니다.
2. Supabase CLI 로그인
로그인을 위해 Access Token을 발급받습니다.
Supabase Team > Access Tokens에서 발급할 수 있습니다. (프로젝트 단위가 아닌 팀단위로 Access Token을 관리합니다.
Access Token은 발급 당시에만 확인이 가능하므로 잘 기록해두어야 합니다.
이제 이 Access Token으로 CLI에서 로그인을 진행합니다.
supabase login --token [access_token]
3. 로컬에 프로젝트 생성
supabase init
Deno를 사용하지 않아서 모두 No로 설정했습니다.
Remote에 있는 projects list를 확인할 수 있습니다.
LINKED가 빈 값으로 설정되어 있는 이유는 로컬 프로젝트와 연결된 것이 없기 때문입니다.
그럼 로컬과 Remote를 연결해봅시다.
supabase link
Selected project: [project ref id]
Enter your database password (or leave blank to skip):
연결하고 싶으면 DB password를 입력하라고 하네요. 당장 skip 하더라도 나중에 dump 뜰 때 반드시 입력해야 하니 지금 입력하겠습니다.
dump 뜰 Project > Settings > Database > Database Password 에서 새로운 Database password를 설정할 수 있습니다.
DB password도 설정 후에는 다시 확인할 수 없으니 잘 기록해두어야 합니다. 까먹으면 reset 해야 합니다.
4. dump
드디어 dump를 뜨기 위한 모든 설정을 마쳤습니다.
아래 명령어를 실행하면 해당 명령어를 실행한 디렉토리에 supabase/schema.sql 파일이 생성됩니다.
supabase db dump -f supabase/schema.sql
schema.sql이 생성된 모습
Dump 뜬 sql 옮기기
1. 옮길 대상 project와 link하기
동일 팀계정에서 Dump를 복사하는 경우를 기준입니다.
만약 다른 계정의 DB에 Dump를 붙여넣을 계획이라면 logout하고 해당 팀 계정으로 login 후 진행하시면 됩니다.
-
다른 계정 DB에 Dump 시 필요한 추가 과정
- 기존 계정에서 로그아웃
supabase logout
- 붙여넣을 계정으로 로그인
supabase login --token [access_token]
붙여넣을 프로젝트와 dump 뜬 프로젝트의 구분을 위해 새로운 디렉토리를 생성했습니다.
mkdir release
cd release # 붙여넣을 프로젝트 경로
dump 뜰때와 동일하게 새로운 로컬 프로젝트 생성합니다.
supabase init
붙여넣을 프로젝트 reference id를 선택해서 link를 진행합니다.
supabase link
Selected project: [project ref id]
Enter your database password (or leave blank to skip):
2. 마이그레이션
이제 아래 명령어를 실행시킵니다. 그럼 디렉토리에 migrations.sql이라는 빈파일이 하나 생성됩니다.
supabase migration new migration
migration.sql 파일이 생성된 모습
기존 dump 뜬 프로젝트의 schema.sql의 내용을 그대로 migration.sql에 복사해 붙여넣습니다.
SQL 파일이라 바로 안 열릴텐데, 텍스트 편집기로 열면 잘 열립니다.
이제 아래 명령어를 작성해 remote DB에 push합니다.
supabase migration up --db-url postgresql://postgres.PROJECT_NAME:[email protected]:6543/postgres
명령어 마지막에 작성된 URI는 Supabase에서 Connect > Transaction pooler에 정의된 URI를 그대로 복사해 붙여넣으면 됩니다.
또는 remote DB와 local DB가 link 되어 있는 상태라면 아래 명령어도 동일하게 동작합니다.
supabase db push
Supabase Console > Migrations에 가면 migrations.sql에 작성한 쿼리문과 마이그레이션 시간이 남아있는 것을 확인할 수 있습니다.
한 가지 덧붙이자면 anon sign in 설정은 sql 마이그레이션 내용에 포함되지 않는 모양입니다.
anon sign in을 사용한다면 마이그레이션 한 프로젝트 설정에서 따로 사용 설정을 해주셔야 합니다.