不支援的資料庫功能
並非所有 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
)。 -
您不能或不想依賴
uuid()
和cuid()
等函數,這些函數僅在 Prisma ORM 層級實作,且不會在資料庫中顯現。考慮以下範例,它將
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
預覽功能 宣告擴充功能來啟用它
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
不支援的欄位類型
某些關聯式資料庫的資料庫類型(例如 polygon
或 geometry
)在 Prisma Schema Language 中沒有對應項目。使用 Unsupported
欄位類型來表示 Prisma schema 中的欄位
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 schema 中表示。如果您的專案使用 Prisma Migrate,您必須將不支援的功能包含為遷移的一部分。