Upsert в prisma без ID создает повторяющиеся записи (ошибка обещания?)
Мне нужно вставить записи в базу данных PG из файла с 500 тыс. записей.
Поскольку файл огромен, я создаю поток чтения и используюJSONStream.parse
отправлятьjson
возражает противpipe
.
Все идет нормально. Это не проблема, я просто предоставляю контекст.
После анализа объекта мне нужно вставить информацию, используяprisma
но я не могу вставлять записи, если определенное поле уже есть в таблице. Итак, первое, что я думаю, это то, что я должен использоватьupsert
.
Проблема в том, что это поле не является уникальным ключом этой таблицы, поэтому я не могу использовать его вwhere
пунктprisma upsert
.
Затем я сделал следующее:
await prisma.pets
.findFirst({
where: { name: nameFromJson },
})
.then(async (existing_pet) => {
if (!existing_pet) {
await prisma.pets.create({
data: {
name: nameFromJson,
legs: numberOfLegs,
isAlive: isAlive,
},
})
}
})
.catch((error) => {
throw new Error(error)
})
Моя идея состоит в том, чтобы сначала найти запись с тем же полем, а когда это обещание будет разрешено, отправить результат в другое обещание, где я могу проверить запись, и если она не существует, то просто выстрелитьcreate
.
Но я продолжаю получать дубликаты в таблице.
Я хотел бы понять, что я делаю неправильно. И, конечно же, как правильно поступить в таком сценарии.