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

Имеется две таблицы, в одной поле X - UNIQUE (ON

CONFLICT(X) DO NOTHING), делаю вставку данных в эти таблицы через executemany,
подскажите как сделать так что бы если таблица уже содержит это уникальное поле, то вставка во вторую таблицу не происходила? это вообще реально через множественную вставку или нужно по одномой строке вставлять и если ошибка - отменять транзакцию? Спасибо

9 ответов

21 просмотр
Oleg-Katushka Автор вопроса

метод asyncpg либы для postgres в питоне. Думал получать через RETURNING айдишники и вставлять во вторую таблицу если пришел не NULL то есть если insert был, но asyncpg не поддерживает RETURNING для множественной вставки

Oleg Katushka
метод asyncpg либы для postgres в питоне. Думал по...

А в чём проблема вызвать множественную вставку с помощью fetch? Тогда ж всё ок будет

Oleg-Katushka Автор вопроса
Dmitriy Sviridov
А в чём проблема вызвать множественную вставку с п...

тогда если делать ON CONFLICT DO NOTHING RETURNING id, я не смогу получить айдишки новых вставленных строк, а без этого я не знаю нужно ли вставлять связанные данные в другую табличку, а если оставить ON CONFLICT NO ACTION то все запросы упадут

Oleg Katushka
метод asyncpg либы для postgres в питоне. Думал по...

Да всё можно, можно INSERT ... RETURNING обернуть в cte и результат использовать в другом INSERT, например. (Ещё можно дописать asnycpg, там кода-то немного). Ещё можно вообще весь dataset на сервер отправить, и пусть там запросы разбираются -- что куда перекладывать. Только вопрос -- а оно вам надо? У вас вообще хоть какой-то кусок этой обработки является проблемным по скорости?

Oleg-Katushka Автор вопроса
Ilya Anfimov
Да всё можно, можно INSERT ... RETURNING обернуть ...

ну новых строк может быть +- 800 в сек, если вставлять по строке то не хватает пула из 5 конекшенов, то я по +- 50 срок вставляю сразу

Oleg-Katushka Автор вопроса

бд и воккер на разных серверах, поэтому 0.05 сек еще просто уходит на доставку

Oleg Katushka
да

Тогда вариант "Ещё можно вообще весь dataset на сервер отправить, и пусть там запросы разбираются -- что куда перекладывать." становится более привлекательным. (Если всё сложно с SQL (хотя это работа как раз для него) -- пишыте на питоне на сервере).

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

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

а через ESC-код ?
Alexey Kulakov
29
30500 за редактор? )
Владимир
47
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
13
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
program test; {$mode delphi} procedure proc(v: int32); overload; begin end; procedure proc(v: int64); overload; begin end; var x: uint64; begin proc(x); end. Уж не знаю...
notme
6
Ребят в СИ можно реализовать ООП?
Николай
33
у вас два процесса. один посылает другому сигнал. у вас есть код обоих процессов? если всё не так - расскажите как оно на самом деле. а именно кто кому чего, есть-ли консоли,...
Karagy
6
вы делали что-то подобное и как? может есть либы готовые? увидел картинку нокода, где всё линиями соединено и стало интересно попробовать то же в ddl на lua сделать. решил с ч...
Victor
8
Карта сайта