跳到主要内容

原生数据库函数

在 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 扩展。如果你改为在 Prisma Schema 中使用 postgresqlExtensions 预览特性管理 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

每次重置数据库或添加新成员到团队时,所有必需的函数都会作为迁移历史的一部分。