CONFLICT(X) DO NOTHING), делаю вставку данных в эти таблицы через executemany,
подскажите как сделать так что бы если таблица уже содержит это уникальное поле, то вставка во вторую таблицу не происходила? это вообще реально через множественную вставку или нужно по одномой строке вставлять и если ошибка - отменять транзакцию? Спасибо
метод asyncpg либы для postgres в питоне. Думал получать через RETURNING айдишники и вставлять во вторую таблицу если пришел не NULL то есть если insert был, но asyncpg не поддерживает RETURNING для множественной вставки
А в чём проблема вызвать множественную вставку с помощью fetch? Тогда ж всё ок будет
тогда если делать ON CONFLICT DO NOTHING RETURNING id, я не смогу получить айдишки новых вставленных строк, а без этого я не знаю нужно ли вставлять связанные данные в другую табличку, а если оставить ON CONFLICT NO ACTION то все запросы упадут
Да всё можно, можно INSERT ... RETURNING обернуть в cte и результат использовать в другом INSERT, например. (Ещё можно дописать asnycpg, там кода-то немного). Ещё можно вообще весь dataset на сервер отправить, и пусть там запросы разбираются -- что куда перекладывать. Только вопрос -- а оно вам надо? У вас вообще хоть какой-то кусок этой обработки является проблемным по скорости?
ну новых строк может быть +- 800 в сек, если вставлять по строке то не хватает пула из 5 конекшенов, то я по +- 50 срок вставляю сразу
бд и воккер на разных серверах, поэтому 0.05 сек еще просто уходит на доставку
Они в разных странах что ли?
Тогда вариант "Ещё можно вообще весь dataset на сервер отправить, и пусть там запросы разбираются -- что куда перекладывать." становится более привлекательным. (Если всё сложно с SQL (хотя это работа как раз для него) -- пишыте на питоне на сервере).
Обсуждают сегодня