原生数据库函数
在 PostgreSQL 中,一些原生数据库函数是可选扩展的一部分。例如,在 PostgreSQL 12.13 及更早版本中,gen_random_uuid()
函数是 pgcrypto
扩展的一部分。
要使用 PostgreSQL 扩展,您必须在数据库服务器的文件系统上安装它,然后激活该扩展。如果您使用 Prisma Migrate,则必须在迁移中执行此操作。
如果您使用 Prisma Migrate,请不要在迁移文件之外激活扩展。 影子数据库 需要相同的扩展。Prisma Migrate 会自动创建和删除影子数据库,因此激活扩展的唯一方法是将其包含在迁移文件中。
在 Prisma ORM 4.5.0 及更高版本中,您可以使用 postgresqlExtensions
预览功能 在 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
扩展。
-
将使用原生数据库函数的字段添加到您的模式中。
model User {
id String @id @default(dbgenerated("gen_random_uuid()")) @db.Uuid
}如果您包含强制转换运算符(例如
::TEXT
),则必须将整个函数括在括号中。@default(dbgenerated("(gen_random_uuid()::TEXT)"))
-
使用
--create-only
标志生成新的迁移,但不应用它。npx prisma migrate dev --create-only
-
打开生成的
migration.sql
文件,并启用pgcrypto
模块。CREATE EXTENSION IF NOT EXISTS pgcrypto;
ADD COLUMN "id" UUID NOT NULL DEFAULT gen_random_uuid(),
ADD PRIMARY KEY ("id"); -
应用迁移。
npx prisma migrate dev
每次重置数据库或向团队添加新成员时,所有必需的函数都是迁移历史记录的一部分。