170 похожих чатов

Ребят, а нормально ли вот так создавать записи в базу?

это sequelize

Я чет думаю что нужно это в транзакцию завернуть все, но как тогда мне получать промежуточные результаты

18 ответов

17 просмотров

Попробуй bulkCreate

Dmytro-Svyrydenko Автор вопроса

А если у меня под капотом в модели не просто create, а findOrCreate?

Там есть опция пропускать если существует. Основано на индексах

Там - это где? И что пропускать?

В bulkCreate. Ответ, на ответ как бы

https://sequelize.org/master/class/lib/model.js~Model.html#static-method-bulkCreate options.ignoreDuplicates

Dmytro-Svyrydenko Автор вопроса

Посмотрю, возвращает ли оно после инсерта результат Если да, то тоже сойдет

Конечно возвращает. Только в случае отката транзакции все возвращённые данные будут могут быть недействительны, т.к. отсутствуют в БД.

Dmytro-Svyrydenko Автор вопроса

А если заюзать обертку в транзакцию, то я смогу контролировать что транзакции откатились, и уже обрабатывать это Выглядит как более правильное решение

options.returning. только стопроцентов работает в postgresql. Как в других хз.

Да, в ошибке у catch будет указана причина. Если это на стороне БД проблема, то в sqlz есть много типизированных ошибок, которые говорят о конкретных проблемах. В зависимости от типа можно любую логику писать. Только упавшую транзакцию больше нельзя использовать, надо новую создавать.

Dmytro-Svyrydenko Автор вопроса

В доке по returning не описано что произойдет если транзакции откатятся -_-

Dmytro-Svyrydenko Автор вопроса

Окей, вроде то что нужно Правильный ли я сделал из этого всего вывод – инсертить кучу значений просто через Promise.all нельзя категорически?

Если транзакция откатится на следующем запросе, данные будут не актульны. Что как бы логично. Если ошибка произойдет на этом запросе, то ничего не вернет

returning в этом случае не сработает, т.к. транзакция не просто откатится, а будет throw - улетит в перехватчик ошибок.

Почему же? Можно. Как раз сформируется очередь из запросов максимально близко к БД. Но если есть возможность вставить всё одним запросом, то так лучше для производительности.

Dmytro-Svyrydenko Автор вопроса

Т.е. если я точно знаю что инсертов будет всегда в районе 5-10, то смысла особо нету?

Смысл не в количестве, а в бизнес-логике. Если требуется отдельная обработка каждой вставки или ещё что, то отдельные запросы. А так - лучше за раз. Но тут важно понимать, что некоторые методы sqlz формируют несколько запросов сами по себе. Например, findOrCreate может так работать. Поэтому всё зависит от конкретной логики и требований.

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта