跳到主要內容

不支援的資料庫功能 (Prisma Schema)

Prisma ORM 支援的資料庫並非所有資料庫函式和功能都有對應的 Prisma Schema Language 等價物。請參閱資料庫功能矩陣以獲取受支援功能的完整列表。

原生資料庫函式

Prisma Schema Language 支援多種函式,您可以使用它們來設定欄位的預設值。以下示例使用 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
}

何時使用資料庫級函式

使用資料庫級函式有兩個原因

  • 沒有等效的 Prisma ORM 函式(例如,PostgreSQL 中的 gen_random_bytes)。

  • 您不能或不想依賴僅在 Prisma ORM 級別實現且未在資料庫中體現的函式,例如 uuid()cuid()

    考慮以下示例,它將 id 欄位設定為隨機生成的 UUID

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

    只有當您使用 Prisma Client 建立 Post 時,才會生成 UUID。如果您透過其他方式建立帖子,例如使用純 SQL 編寫的批次匯入指令碼,則必須自行生成 UUID。

為原生資料庫函式啟用 PostgreSQL 擴充套件

在 PostgreSQL 中,一些原生資料庫函式是擴充套件的一部分。例如,在 PostgreSQL 12.13 及更早版本中,gen_random_uuid() 函式是pgcrypto擴充套件的一部分。

要使用 PostgreSQL 擴充套件,您必須首先將其安裝在資料庫伺服器的檔案系統上。

在 Prisma ORM 4.5.0 及更高版本中,您可以透過在 Prisma Schema 中使用postgresqlExtensions 預覽功能來宣告從而啟用該擴充套件。

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 Schema Language 等價物。使用Unsupported欄位型別在 Prisma Schema 中表示該欄位

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

prisma migrate devprisma db push 命令都將在資料庫中建立一個型別為 circleposition 欄位。但是,該欄位將無法在生成的 Prisma Client 中使用。

不支援的資料庫功能

某些功能,例如 SQL 檢視或部分索引,無法在 Prisma Schema 中表示。如果您的專案使用Prisma Migrate,則必須將不支援的功能作為遷移的一部分包含

© . This site is unofficial and not affiliated with Prisma Data, Inc.