无效的`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时`(不可用)`的主要内容,如果未能解决你的问题,请参考以下文章