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

サポートされていないデータベース機能

Prisma ORMでサポートされているデータベースのすべてのデータベース機能が、Prismaスキーマ言語で同等の機能を持っているわけではありません。サポートされている機能の完全なリストについては、データベース機能マトリックスを参照してください。

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

Prismaスキーマ言語は、フィールドのデフォルト値を設定するために使用できるいくつかの関数をサポートしています。次の例では、Prisma ORMレベルのuuid()関数を使用して、idフィールドの値を設定しています。

model Post {
id String @id @default(uuid())
}

ただし、リレーショナルデータベースでは、dbgenerated(...)を使用してネイティブデータベース関数を使用してデフォルト値を定義することもできます(MongoDBにはデータベースレベルの関数の概念はありません)。次の例では、PostgreSQLのgen_random_uuid()関数を使用して、idフィールドを設定しています。

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

データベースレベルの関数を使用する場合

データベースレベルの関数を使用する理由は2つあります。

  • 同等のPrisma ORM関数がない場合(たとえば、PostgreSQLのgen_random_bytes)。

  • Prisma ORMレベルでのみ実装され、データベースには現れないuuid()cuid()などの関数に依存したくない、または依存できない場合。

    次の例を考えてみましょう。これは、idフィールドをランダムに生成されたUUIDに設定します。

    model Post {
    id String @id @default(uuid())
    }

    UUIDは、Prisma Clientを使用してPostを作成する場合のみ生成されます。プレーンSQLで記述された一括インポートスクリプトなど、他の方法で投稿を作成する場合は、UUIDを自分で生成する必要があります。

ネイティブデータベース関数用にPostgreSQL拡張機能を有効にする

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

PostgreSQL拡張機能を使用するには、まずデータベースサーバーのファイルシステムにインストールする必要があります。

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 ORMでは、代わりにSQLコマンドを実行して拡張機能をアクティブ化する必要があります。

CREATE EXTENSION IF NOT EXISTS pgcrypto;

プロジェクトでPrisma Migrateを使用している場合は、移行の一部として拡張機能をインストールする必要があります。シャドウデータベースでも必要になるため、拡張機能を手動でインストールしないでください。

拡張機能が利用できない場合、Prisma Migrateは次のエラーを返します。

Migration `20210221102106_failed_migration` failed to apply cleanly to a temporary database.
Database error: Error querying the database: db error: ERROR: type "pgcrypto" does not exist

サポートされていないフィールド型

polygongeometryなど、リレーショナルデータベースの一部のデータベース型には、Prismaスキーマ言語で同等の型がありません。Prismaスキーマでフィールドを表すには、Unsupportedフィールド型を使用してください。

model Star {
id Int @id @default(autoincrement())
position Unsupported("circle")? @default(dbgenerated("'<(10,4),11>'::circle"))
}

prisma migrate devコマンドとprisma db pushコマンドはどちらも、データベースにcircle型のpositionフィールドを作成します。ただし、このフィールドは生成されたPrisma Clientでは使用できません。

サポートされていないデータベース機能

SQLビューや部分インデックスなど、一部の機能はPrismaスキーマで表現できません。プロジェクトでPrisma Migrateを使用している場合は、移行の一部としてサポートされていない機能を含める必要があります。