メインコンテンツにスキップ

ネイティブデータベース関数

PostgreSQLでは、一部のネイティブデータベース関数はオプションの拡張機能の一部です。例えば、PostgreSQLバージョン12.13以前では、gen_random_uuid() 関数は pgcrypto 拡張機能の一部です。

PostgreSQL拡張機能を使用するには、データベースサーバーのファイルシステムにインストールし、その後拡張機能をアクティブ化する必要があります。Prisma Migrateを使用する場合は、これをマイグレーションの一部として行う必要があります。

警告

Prisma Migrateを使用している場合、マイグレーションファイル以外で拡張機能をアクティブ化しないでください。シャドウデータベースは同じ拡張機能を必要とします。Prisma Migrateはシャドウデータベースを自動的に作成および削除するため、拡張機能をアクティブ化する唯一の方法は、マイグレーションファイルに含めることです。

Prisma ORM バージョン 4.5.0 以降では、Prisma スキーマで postgresqlExtensions プレビュー機能を使用して拡張機能を宣言することでアクティブ化できます。

schema.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拡張機能をインストールする方法

このセクションでは、PostgreSQL拡張機能をアクティブ化するためにマイグレーションファイルにSQLコマンドを追加する方法について説明します。代わりにPrismaスキーマでpostgresqlExtensionsプレビュー機能を使用してPostgreSQL拡張機能を管理する場合は、PostgreSQL拡張機能をマイグレーションする方法を参照してください。

次の例は、マイグレーションの一部としてpgcrypto拡張機能をインストールする方法を示しています

  1. ネイティブデータベース関数を含むフィールドをスキーマに追加する

    model User {
    id String @id @default(dbgenerated("gen_random_uuid()")) @db.Uuid
    }

    キャスト演算子 (::TEXT など) を含める場合、関数全体を括弧で囲む必要があります。

    @default(dbgenerated("(gen_random_uuid()::TEXT)"))
  2. --create-only フラグを使用して、適用せずに新しいマイグレーションを生成します。

    npx prisma migrate dev --create-only
  3. 生成された migration.sql ファイルを開き、pgcrypto モジュールを有効にします。

    CREATE EXTENSION IF NOT EXISTS pgcrypto;

    ADD COLUMN "id" UUID NOT NULL DEFAULT gen_random_uuid(),
    ADD PRIMARY KEY ("id");
  4. マイグレーションを適用する

    npx prisma migrate dev

データベースをリセットしたり、チームに新しいメンバーを追加したりするたびに、必要なすべての関数がマイグレーション履歴の一部となります。

© . All rights reserved.