跳到主要內容

原生資料庫函式

在 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

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

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