Prisma Migrate の default(uuid()) attribute は DB のテーブル定義に影響を与えない
下記のようなデフォルト値の記述が無い id field を含む User model があるとする。
model User { id String @id }
この id field に @default(uuid())
attribute を付けて prisma migrate dev --preview-feature
を実行すると、DEFAULT gen_random_uuid()
のような設定が id カラムに付与される ALTER TABLE が書かれた migration ファイルが作成されるかと思いきやそんなことはなく、何も起こらない。
なぜだろうと思っていたら、ちゃんとドキュメントに理由が書かれていた。
https://www.prisma.io/docs/reference/api-reference/prisma-schema-reference#uuid
Implemented by Prisma and therefore not "visible" in the underlying database schema. You can still use uuid() when using introspection by manually changing your Prisma schema and generating Prisma Client, in that case the values will be generated by Prisma's query engine.
Prisma Client に実装された generator が UUID を生成するので DB scheama には生成のための設定は付与しないということだった。cuid の場合も同様のようだ。