ネイティブデータベース関数
PostgreSQLでは、一部のネイティブデータベース関数はオプションの拡張機能の一部です。 例えば、PostgreSQLバージョン12.13以前では、gen_random_uuid()
関数はpgcrypto
拡張機能の一部です。
PostgreSQL拡張機能を使用するには、データベースサーバーのファイルシステムにインストールし、拡張機能をアクティブ化する必要があります。 Prisma Migrateを使用する場合、これはマイグレーションの一部として行う必要があります。
Prisma Migrateを使用する場合、マイグレーションファイル外で拡張機能をアクティブ化しないでください。 シャドウデータベースも同じ拡張機能を必要とします。 Prisma Migrateはシャドウデータベースを自動的に作成および削除するため、拡張機能をアクティブ化する唯一の方法は、マイグレーションファイルに含めることです。
Prisma ORMバージョン4.5.0以降では、postgresqlExtensions
プレビュー機能を使用してPrismaスキーマで宣言することにより、拡張機能をアクティブ化できます
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拡張機能をマイグレーションの一部としてインストールする方法
このセクションでは、SQLコマンドをマイグレーションファイルに追加してPostgreSQL拡張機能をアクティブ化する方法について説明します。 代わりにpostgresqlExtensions
プレビュー機能を使用してPrismaスキーマで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
データベースをリセットしたり、チームに新しいメンバーを追加したりするたびに、必要なすべての関数がマイグレーション履歴に含まれます。