Попробуй bulkCreate
А если у меня под капотом в модели не просто create, а findOrCreate?
Там есть опция пропускать если существует. Основано на индексах
Там - это где? И что пропускать?
В bulkCreate. Ответ, на ответ как бы
https://sequelize.org/master/class/lib/model.js~Model.html#static-method-bulkCreate options.ignoreDuplicates
Посмотрю, возвращает ли оно после инсерта результат Если да, то тоже сойдет
Конечно возвращает. Только в случае отката транзакции все возвращённые данные будут могут быть недействительны, т.к. отсутствуют в БД.
А если заюзать обертку в транзакцию, то я смогу контролировать что транзакции откатились, и уже обрабатывать это Выглядит как более правильное решение
options.returning. только стопроцентов работает в postgresql. Как в других хз.
Да, в ошибке у catch будет указана причина. Если это на стороне БД проблема, то в sqlz есть много типизированных ошибок, которые говорят о конкретных проблемах. В зависимости от типа можно любую логику писать. Только упавшую транзакцию больше нельзя использовать, надо новую создавать.
В доке по returning не описано что произойдет если транзакции откатятся -_-
Окей, вроде то что нужно Правильный ли я сделал из этого всего вывод – инсертить кучу значений просто через Promise.all нельзя категорически?
Если транзакция откатится на следующем запросе, данные будут не актульны. Что как бы логично. Если ошибка произойдет на этом запросе, то ничего не вернет
returning в этом случае не сработает, т.к. транзакция не просто откатится, а будет throw - улетит в перехватчик ошибок.
Почему же? Можно. Как раз сформируется очередь из запросов максимально близко к БД. Но если есть возможность вставить всё одним запросом, то так лучше для производительности.
Т.е. если я точно знаю что инсертов будет всегда в районе 5-10, то смысла особо нету?
Смысл не в количестве, а в бизнес-логике. Если требуется отдельная обработка каждой вставки или ещё что, то отдельные запросы. А так - лучше за раз. Но тут важно понимать, что некоторые методы sqlz формируют несколько запросов сами по себе. Например, findOrCreate может так работать. Поэтому всё зависит от конкретной логики и требований.
Обсуждают сегодня