首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >psql db不兼容类型的Prisma : text和uuid

psql db不兼容类型的Prisma : text和uuid
EN

Stack Overflow用户
提问于 2022-02-09 03:02:44
回答 4查看 3.5K关注 0票数 3

我正在学习如何在psql数据库中使用prisma。

我遇到了一个使用引用的问题,其中id是一个uuid字符串。

我有一个用户模型:

代码语言:javascript
运行
复制
model User {
  id        String   @id @default(dbgenerated("gen_random_uuid()")) @db.Uuid
  request   Request?
  createdAt DateTime @default(now()) @db.Timestamptz(6)
  updatedAt DateTime @default(now()) @updatedAt @db.Timestamptz(6)
}

model Request {
  id                Int @id @default(autoincrement())
  user              User   @relation(fields: [id], references: [id])
  // I also tried making the relation field userId
  createdAt         DateTime @default(now()) @db.Timestamptz(6)
  updatedAt         DateTime @default(now()) @updatedAt @db.Timestamptz(6)
}

当我试图迁移它时,我会得到一个错误,即:

未能干净地应用于阴影数据库。错误: db错误:错误:不能详细实现外键约束"Request_userId_fkey“:键列"userId”和"id“是不兼容的类型: text和uuid。

prisma文档没有显示使用uuid的示例。

他们给出的示例在配置文件模型中有第二个参数,其中有一个userId作为Int。我尝试将它添加到请求模型中(作为int、字符串和uuid)。这些都不管用。

代码语言:javascript
运行
复制
model User {
  id      Int      @id @default(autoincrement())
  email   String   @unique
  name    String?
  role    Role     @default(USER)
  posts   Post[]
  profile Profile?
}

model Profile {
  id     Int    @id @default(autoincrement())
  bio    String
  user   User   @relation(fields: [userId], references: [id])
  userId Int
}

当使用uuid生成userId时,如何引用它?

prisma文件部分建议(如果我理解正确的话),任何字符串、Int或枚举都应该用于识别uuid:

对应数据库类型的关系数据库:主键 可以用@default()值注释,该值使用函数自动生成ID: 自动增量() cuid() uuid()可以在任何标量字段(String,Int,enum)上定义。

当我尝试将pgcrypto扩展添加到psql中时,我尝试再次运行迁移并获得一个包含较少详细消息传递的错误,但仍然存在类似的问题:

错误解析属性"@relation":模型id中的字段Request的类型与模型User中引用的字段id的类型不匹配。

我见过这一讨论,它暗示我在某种程度上对普丽斯玛撒谎。我不够聪明,无法理解谎言应该是什么或如何做的要点。

github上有人建议在请求模型中使用这个引用语法:

代码语言:javascript
运行
复制
user                   User                      @relation(fields: [userId], references: [id])
userId                 String                    @unique    @db.Uuid

我尝试了上面的方法,并且没有@唯一标志,但是我仍然得到一个迁移错误,它说uuid和text是不兼容的引用。我找不到prisma文档中关于如何使uuid引用与关系模型兼容的部分。

fyi:上述尝试的迁移文件显示了以下内容:

代码语言:javascript
运行
复制
CREATE TABLE "Request" (
    "id" SERIAL NOT NULL,
    "userId" UUID NOT NULL,
    
    CONSTRAINT "Request_pkey" PRIMARY KEY ("id")
);
EN

Stack Overflow用户

发布于 2022-04-11 05:28:56

我认为费利克斯黑格尔回答是解决办法。我可以添加您应该删除失败的生成迁移sql (通过删除文件夹),并在修复问题后再次尝试它。

票数 0
EN
查看全部 4 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71043504

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档