跳到主要內容

原生資料庫函數

在 PostgreSQL 中,一些原生資料庫函數是可選擴充功能的一部分。例如,在 PostgreSQL 12.13 及更早版本中,gen_random_uuid() 函數是 pgcrypto 擴充功能的一部分。

要使用 PostgreSQL 擴充功能,您必須將其安裝在資料庫伺服器的檔案系統上,然後啟用該擴充功能。如果您使用 Prisma Migrate,則必須在遷移中完成此操作。

警告

如果您使用 Prisma Migrate,請勿在遷移檔案之外啟用擴充功能。影子資料庫需要相同的擴充功能。Prisma Migrate 會自動建立和刪除影子資料庫,因此啟用擴充功能的唯一方法是將其包含在遷移檔案中。

在 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 Migrate 將這些變更套用到您的資料庫。有關詳細資訊,請參閱如何遷移 PostgreSQL 擴充功能

在較早版本的 Prisma ORM 中,您必須改為在遷移檔案中新增 SQL 命令以啟用擴充功能。請參閱如何作為遷移的一部分安裝 PostgreSQL 擴充功能

如何作為遷移的一部分安裝 PostgreSQL 擴充功能

本節說明如何將 SQL 命令新增到遷移檔案中,以啟用 PostgreSQL 擴充功能。如果您改為使用 postgresqlExtensions 預覽功能在 Prisma Schema 中管理 PostgreSQL 擴充功能,請參閱如何遷移 PostgreSQL 擴充功能

以下範例示範如何作為遷移的一部分安裝 pgcrypto 擴充功能

  1. 將具有原生資料庫函數的欄位新增到您的 schema 中

    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

每次您重設資料庫或新增團隊成員時,所有必要函數都將成為遷移歷史記錄的一部分。