본문 바로가기
Q&A2026년 5월 29일2분 읽기

Drizzle 1.0 + Neon — schema migrate 후 indexes가 누락됩니다

송
송하늘
조회 561댓글 3

Drizzle 1.0 GA로 마이그레이션하면서 schema에 index 추가했는데 prod에 적용 안 됩니다.

// schema.ts
export const posts = pgTable('posts', {
  id: serial('id').primaryKey(),
  slug: varchar('slug', { length: 200 }).notNull(),
  authorId: integer('author_id').references(() => users.id),
  createdAt: timestamp('created_at').defaultNow(),
}, (t) => ({
  slugIdx: uniqueIndex('posts_slug_idx').on(t.slug),
  authorIdx: index('posts_author_idx').on(t.authorId),
}))

drizzle-kit generate로 마이그레이션 만들고 prod에 apply 했는데 \di로 확인하니 index가 만들어지지 않았습니다.

SQL 파일은 정상으로 보이는데...

CREATE UNIQUE INDEX IF NOT EXISTS "posts_slug_idx" ON "posts" ("slug");
CREATE INDEX IF NOT EXISTS "posts_author_idx" ON "posts" ("author_id");

마이그레이션 실행 로그도 success.

댓글 3

김김영삼5개월 전

몇 가지 가능성이 있습니다.


1. drizzle.config.ts에 migration 디렉토리 미스매치


가장 흔합니다. drizzle-kit이 보는 디렉토리와 migrate 함수가 실행하는 디렉토리가 다르면 일부 파일만 적용.


// drizzle.config.ts
export default {
schema: './src/db/schema.ts',
out: './drizzle', // ← 이거
dialect: 'postgresql',
}

// migrate.ts
import { migrate } from 'drizzle-orm/node-postgres/migrator'
await migrate(db, { migrationsFolder: './drizzle' }) // ← 같은 경로?

2. Neon의 branch가 prod 아닌 다른 branch에 적용


Neon은 multi-branch DB. 환경변수 DATABASE_URL이 다른 branch를 가리키면 의도와 다른 곳에 적용. Neon 대시보드에서 branch 별 schema 확인.


# prod branch 확인
psql $DATABASE_URL -c "SELECT current_database(), current_schemas(true);"

3. drizzle.journal.json이 stale


./drizzle/meta/_journal.json이 이미 applied로 기록되어 있으면 drizzle-kit이 skip. 새 migration에 index 추가했어도 journal이 outdated면 무시.


# 강제 재실행
DROP TABLE IF EXISTS "__drizzle_migrations";
# 그 후 다시 migrate

또는 journal 파일 직접 확인해서 마지막 applied tag 비교.


4. CREATE INDEX CONCURRENTLY 권장


큰 테이블에 index 추가하면서 잠금 회피하려면:


// 마이그레이션 SQL 직접 수정
CREATE UNIQUE INDEX CONCURRENTLY IF NOT EXISTS "posts_slug_idx" ON "posts" ("slug");

drizzle-kit이 자동 생성한 SQL은 CONCURRENTLY 안 붙입니다. 큰 테이블이면 수동 추가 권장.


1번이 가장 흔하니 거기서부터 확인해보세요.

데데이터사이언스현5개월 전

저희도 같은 함정 — Neon에서 development branch 자동 생성된 거 모르고 거기에 migration 돌렸어요. Neon CLI로 모든 branch 한 번 확인하시는 게 좋습니다.


neonctl branches list
ddrizzle_user_jung(guest)5개월 전
1.0 GA 직후라 drizzle-kit에 일부 버그 보고됐던 거 같은데 1.0.3까지 올려보세요. journal 처리 관련 패치가 들어갔습니다.
Ctrl+Enter로 등록