хочу добавить их за один проход в базу с помощью Repo.insert_all
но вот незадача — insert_all принимает keyword а не объект.
А есть простой способ превратить Ecto.Schema в keyword ?
с учетом того что всякие id и т.п. у меня nil (т.е. null) и должны генерится базой.
Как ты вызываешь insert_all ?
https://elixirforum.com/t/how-do-i-cast-and-insert-many-items-of-the-same-type-at-once/12619/2 вот так тебе распарсить нужно ченжсеты
жесть то там какая, но спасибо за наводку. могли бы и в коробку такую функцию завести
ну сделай рефакторинг. Так да странно что нету в либе самой функции такой
вник в код .. тупой код .. по сути я так и хочу делать, но надо проще
Какие у тебя предложения? Как это реализовать?
хотя я не понял, почему id: nil? 1. Если ты вставляешь новые данные - то постгря сама проставит ID когда будешь делать Repo.insert_all 2. Если у тебя уже есть данные в базе, то когда будешь использовать Repo.insert_all как upsert то он просто обновит то что ты ему скажешь и конфлик зарезолвится. Если конфликта нету то он вставит новую структуру в базу.
у меня это новые данные, мне нужно их вставить пачкой. Порядка 5М ) нагенерить
там нужно батчить будет, за один проход не вставишь 5м пачку там ограничения есть по кол-ву полей, обычно по 3-5к строк можно вставить(я забыл какие там точно ограничения по полям вроде 95к). Но если новые вставляешь то id у тебя нагенерит постгря сама, id nil быть не может, ну точнее у тебя только одна тогда структура же будет в БД, на nil срабатывает конфликт.
вот я и батчу кучу всякого на всякое ) .. был бы SQL долго не парился бы ) но тут же надо по феншую )
если постоянно будешь такие объмы генерить ставь бродвей.
да зачем феншуй если у тебя таск однаразовый))как-то запусти и забудь
seed файл
нагенерить же надо
вписать в сид файл
а мысль раскрыть ?
можешь в хендлере данных наряду с гетами и инсертами написать функцию seed и генери ты там что хочешь и как хочешь
ссылку на пример кода можно ?
Обсуждают сегодня