无效的`prisma.mytable.create()`调用:外键约束在字段上失败:使用cockroachdb时`(不可用)`

Posted

技术标签:

【中文标题】无效的`prisma.mytable.create()`调用:外键约束在字段上失败:使用cockroachdb时`(不可用)`【英文标题】:Invalid `prisma.mytable.create()` invocation: Foreign key constraint failed on the field: `(not available)` when using cockroachdb 【发布时间】:2022-01-11 06:11:42 【问题描述】:

我正在尝试在本地使用 Prisma 和 Cockroachdb。我了解 CockroachDB 的官方支持正在筹备中。

我有一个并行的本地 PostgreSQL 数据库,其中一切工作正常,并且我能够生成 Prisma 迁移以针对 Cockroachdb 手动运行。所有这些都有效,我最终得到了两个明显相同的架构。

但是,在 Prisma 中使用 connect 功能的任何创建操作都会失败,并出现以下错误:

Invalid `prisma.mylinkedtable.create()` invocation:
  Foreign key constraint failed on the field: `(not available)`

这是我的 schema.prisma 的关键部分:

datasource db 
  provider = "postgresql"
  url      = "postgresql://user:pass@localhost:26257/mydb"


generator client 
  provider = "prisma-client-js"
  previewFeatures = ["cockroachdb"]


model MyLinkedEntity 
  id           Int      @id @default(autoincrement())
  myEntity     MyEntity  @relation(fields: [myEntityId], references: [id])
  myEntityId    Int
  // ...


model MyEntity 
  id             Int           @id @default(autoincrement())
  // ...

触发外键约束的代码:

const entity = await prisma.myEntity.findFirst()
    
await prisma.myLinkedEntity.create(
    data: 
        myEntityId: entity.id,
        // ...
    

如果我稍微有点不同并尝试使用connect 功能进行链接:

await prisma.myLinkedEntity.create(
    data: 
        myEntity: 
            connect: 
                id: entity.id
            
        ,
        // ...
    

我得到一个不同的错误:

Invalid `prisma.myLinkedEntity.create()` invocation:


  An operation failed because it depends on one or more records that were required but not found. No 'MyEntity' record(s) (needed to inline the relation on 'MyLinkedEntity' record(s)) was found for a nested connect on one-to-many relation 'MyEntityToMyLinkedEntity'.

什么给了?

【问题讨论】:

【参考方案1】:

似乎没有先创建相关行。

您可以尝试改用connectOrCreate 吗? https://www.prisma.io/docs/concepts/components/prisma-client/relation-queries#connect-or-create-a-record

Prisma 模型也可能有问题。我不确定顺序是否重要,但我注意到您在它引用的 ID 之前定义了关系。

最后一点,无关紧要:您不应该在 CockroachDB 中使用自增整数作为键。见https://www.cockroachlabs.com/docs/v21.2/schema-design-table#primary-key-best-practices

【讨论】:

以上是关于无效的`prisma.mytable.create()`调用:外键约束在字段上失败:使用cockroachdb时`(不可用)`的主要内容,如果未能解决你的问题,请参考以下文章

无效日期的“无效日期”? [复制]

对象名 'columns' 无效

sourceTree无效路径问题

Image.FromStream(stream);报参数无效

20210715IDEA:无效的目标发行版本:16

Image.FromStream参数无效