const-tommy.dev
기록을 불러오는 중입니다
CREATE TABLE, ALTER TABLE, CREATE POLICY 같은 SQL을 직접 실행하는 것이다. 빠르지만 문제가 있다.20260611041041_grant_anon_access.sql)supabase/migrations/)에 순서대로 쌓이고, 적용 명령(supabase db push)은 "아직 적용 안 된 파일을 타임스탬프 순으로 DB에 실행"한다.db push 한 번이면 동일한 스키마가 만들어진다. 손으로 다시 칠 필요가 없다.# 1) 마이그레이션 파일 생성 (빈 SQL 파일이 타임스탬프와 함께 생김)
supabase migration new add_user_table
# → supabase/migrations/20260611120000_add_user_table.sql 생성됨-- 2) 그 파일에 DDL 작성
create table users (
id uuid primary key default gen_random_uuid(),
email text not null unique,
created_at timestamptz not null default now()
);# 3) 원격 DB에 적용 (아직 적용 안 된 마이그레이션을 순서대로 실행)
supabase db push
# 4) 스키마가 바뀌었으니 코드 타입도 동기화
supabase gen types typescript --linked > lib/supabase/database.types.tsdb push = 쿼리 적용, migrations 폴더 = 변경 이력, gen types = 스키마와 코드 타입 동기화.schema.prisma라는 자체 DSL로 스키마를 선언하면 도구가 SQL을 생성하고, Supabase는 SQL을 직접 작성한다. 전자는 추상화가 높고, 후자는 SQL을 그대로 다뤄 제어가 직접적이다.db push는 "이미 적용됨"으로 보고 다시 실행하지 않는다. 변경이 필요하면 기존 파일을 건드리지 말고 새 마이그레이션 파일을 추가한다. (예: 권한이 빠졌으면 grant_anon_access 같은 새 파일로 보강) 적용된 이력은 불변으로 두는 게 원칙이다.insert가 든 마이그레이션은 재적용 시 중복 누적될 수 있다. 이럴 땐 db push로 덧붙이지 말고 db reset(전체 재적용)으로 깨끗이 다시 까는 경로를 택한다.