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

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

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

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

警告

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

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

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拡張機能をマイグレーションの一部としてインストールする方法

このセクションでは、SQLコマンドをマイグレーションファイルに追加してPostgreSQL拡張機能をアクティブ化する方法について説明します。 代わりにpostgresqlExtensionsプレビュー機能を使用してPrismaスキーマで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

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