ネイティブデータベース関数
PostgreSQLでは、一部のネイティブデータベース関数はオプションの拡張機能の一部です。例えば、PostgreSQLバージョン12.13以前では、gen_random_uuid()
関数は pgcrypto
拡張機能の一部です。
PostgreSQL拡張機能を使用するには、データベースサーバーのファイルシステムにインストールし、その後拡張機能をアクティブ化する必要があります。Prisma Migrateを使用する場合は、これをマイグレーションの一部として行う必要があります。
Prisma Migrateを使用している場合、マイグレーションファイル以外で拡張機能をアクティブ化しないでください。シャドウデータベースは同じ拡張機能を必要とします。Prisma Migrateはシャドウデータベースを自動的に作成および削除するため、拡張機能をアクティブ化する唯一の方法は、マイグレーションファイルに含めることです。
Prisma ORM バージョン 4.5.0 以降では、Prisma スキーマで postgresqlExtensions
プレビュー機能を使用して拡張機能を宣言することでアクティブ化できます。
generator client {
provider = "prisma-client-js"
previewFeatures = ["postgresqlExtensions"]
}
datasource db {
provider = "postgresql"
url = env("DATABASE_URL")
extensions = [pgcrypto]
}
その後、Prisma Migrateでこれらの変更をデータベースに適用できます。詳細はPostgreSQL拡張機能をマイグレーションする方法を参照してください。
以前のバージョンのPrisma ORMでは、代わりにマイグレーションファイルにSQLコマンドを追加して拡張機能をアクティブ化する必要があります。マイグレーションの一部としてPostgreSQL拡張機能をインストールする方法を参照してください。
マイグレーションの一部としてPostgreSQL拡張機能をインストールする方法
このセクションでは、PostgreSQL拡張機能をアクティブ化するためにマイグレーションファイルにSQLコマンドを追加する方法について説明します。代わりにPrismaスキーマでpostgresqlExtensions
プレビュー機能を使用してPostgreSQL拡張機能を管理する場合は、PostgreSQL拡張機能をマイグレーションする方法を参照してください。
次の例は、マイグレーションの一部としてpgcrypto
拡張機能をインストールする方法を示しています
-
ネイティブデータベース関数を含むフィールドをスキーマに追加する
model User {
id String @id @default(dbgenerated("gen_random_uuid()")) @db.Uuid
}キャスト演算子 (
::TEXT
など) を含める場合、関数全体を括弧で囲む必要があります。@default(dbgenerated("(gen_random_uuid()::TEXT)"))
-
--create-only
フラグを使用して、適用せずに新しいマイグレーションを生成します。npx prisma migrate dev --create-only
-
生成された
migration.sql
ファイルを開き、pgcrypto
モジュールを有効にします。CREATE EXTENSION IF NOT EXISTS pgcrypto;
ADD COLUMN "id" UUID NOT NULL DEFAULT gen_random_uuid(),
ADD PRIMARY KEY ("id"); -
マイグレーションを適用する
npx prisma migrate dev
データベースをリセットしたり、チームに新しいメンバーを追加したりするたびに、必要なすべての関数がマイグレーション履歴の一部となります。