#prisma #cockroachdb
#prisma #cockroachdb
Вопрос:
Я пытаюсь использовать Prisma с Cockroachdb локально. Я понимаю, что официальная поддержка CockroachDB находится в разработке.
У меня есть параллельная локальная база данных PostgreSQL, где все работает правильно, и я могу генерировать миграции Prisma для запуска вручную в Cockroachdb. Все это работает, и в итоге я получаю две, по-видимому, идентичные схемы.
Однако любая операция создания в Prisma с использованием connect
функции завершается ошибкой со следующей ошибкой:
Invalid `prisma.mylinkedtable.create()` invocation:
Foreign key constraint failed on the field: `(not available)`
Вот ключевые части моей схемы.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. Я не уверен, имеет ли значение порядок, но я заметил, что у вас есть отношение, определенное перед идентификатором, на который оно ссылается.
Последний, несвязанный момент: вы не должны использовать автоинкрементные целые числа в качестве ключей в CockroachDB. См. https://www.cockroachlabs.com/docs/v21.2/schema-design-table#primary-key-best-practices