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

PostgreSQL 18 베타에서 Prisma 마이그레이션이 안 돼요

신
신예린
조회 1059댓글 3

PG 18 베타1을 도커로 띄워서 테스트 중인데, 기존 Prisma 6 프로젝트에서 prisma migrate dev 돌리면 다음 에러가 납니다.

Error: P1010
User was denied access on the database

같은 자격증명으로 psql은 접속이 됩니다. PG 17까지는 잘 됐는데 18로 올리니 안 되네요. Prisma 호환성 문제일까요?

댓글 3

김김영삼6개월 전

Prisma 자체 호환성 문제는 아니고, PG 18에서 기본 인증 방식이 강화된 영향일 가능성이 높습니다.

원인

PG 18은 기본 scram_iterations를 4096 → 100000으로 올리면서 일부 클라이언트(특히 노드의 pg 8.10 미만)가 timeout으로 실패합니다. Prisma는 내부적으로 pg 드라이버를 거치는 케이스가 있어서 영향을 받습니다.

해결 — 두 가지 중 선택
# 옵션 1: Prisma 6.6+ 로 업그레이드 (권장)
npm i -D prisma@latest @prisma/client@latest
npx prisma generate
# 옵션 2: PG 측에서 iterations 낮추기 (베타 환경 한정)
# postgresql.conf
scram_iterations = 4096
# 후 재시작

마이그레이션 파일 자체가 문제라면 (UUIDv7 등 새 문법 사용 시) 다른 에러가 났을 텐데, P1010은 명백히 인증 단계 실패입니다.

신신예린(guest)6개월 전
Prisma 6.6.2로 올리니 인증은 되는데, 이번엔 migrate dev 도중에 type "uuidv7" does not exist가 나오네요. 마이그레이션 파일에 직접 uuidv7을 쓴 적 없는데요.
김김영삼6개월 전

기존 마이그레이션 파일이 PG 17 환경에서 자동 생성된 거라 문제없습니다. schema.prisma에 새로 추가한 필드 중 @default(uuid())가 있는지 확인해보세요.

// schema.prisma
model User {
id String @id @default(uuid()) // ← 이 부분
}

Prisma 6.6부터 PG 18을 감지하면 uuid()를 native uuidv7()로 변환합니다. 이 함수는 PG 18부터 네이티브 지원이지만, 베타1에선 일부 빌드에 누락된 케이스가 있어요(2026-05 시점).

해결책:

  • 임시: @default(dbgenerated("gen_random_uuid()")) 로 명시 — pgcrypto 확장 필요
  • 정석: PG 18 RC2 또는 최신 nightly 도커 이미지로 업데이트
    docker pull postgres:18rc1

운영에 들어가는 코드는 RC 이상에서 다시 회귀 테스트해주세요. 베타1은 마이그레이션 파일까지 운영에 가져가지 않는 게 안전합니다.

Ctrl+Enter로 등록