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

День добрый, возможно ли сделать такой батч квери select func(); select func(); ... select

func();

?

24 ответов

21 просмотр
Änwar-كيبشاق الشاب Автор вопроса

я в pgx (golang) пытаюсь это прочесть, он мне читает только первый селект.

Через union или через with, возможно через with recursive, если подходит по задаче.

Änwar-كيبشاق الشاب Автор вопроса
Andrei Ilinskii
Через union или через with, возможно через with re...

мне придется мерджить все батчи в один запрос получается 🤔

Änwar كيبشاق الشاب
мне придется мерджить все батчи в один запрос полу...

А ты разве не это хочешь? - У тебя сейчас отдельные запросы. Отправляй отдельно и получай результат отдельно, если нужно так.

Änwar-كيبشاق الشاب Автор вопроса
Andrei Ilinskii
А ты разве не это хочешь? - У тебя сейчас отдельны...

я просто криворукий у меня под этими функциями огромный инсерт и все инсерты связаны 🤔 (то есть мне бы пришлось ~ 2к отдельных вызова делать) поэтому они и в батче

Änwar كيبشاق الشاب
да

Тогда собери через union. Будет норм.

Änwar-كيبشاق الشاب Автор вопроса
Andrei Ilinskii
Тогда собери через union. Будет норм.

ок, получается батча не будет, я правильно понял? я думал батч будет быстрее потмуш препейрд стейтмент все делв

Änwar كيبشاق الشاب
ок, получается батча не будет, я правильно понял? ...

Я не понимаю что в вашей терминологии означает "батч". Выше вы привели отдельные запросы, которые выполняются по отдельности. Через union как раз все запросы можно собрать в одну пачку и выполнить как раз-таки батч, всю пачку разом.

Änwar كيبشاق الشاب
ок, получается батча не будет, я правильно понял? ...

Так, а это уже другой вопрос. Если это не разовая процедура, то нужно собрать один конкретный запрос, иначе замучаетесь мониторить потом базу с разными запросами на одну сущность. Пример выше - это дословно как оно выглядит, или есть какие-то входные данные?

Änwar-كيبشاق الشاب Автор вопроса
Andrei Ilinskii
Так, а это уже другой вопрос. Если это не разовая ...

есть входные данные, один из аргументов это динамический квери func(dynQuery, arg, otherArg) { execute query into someId insert smth(...) values (..., someId) return someId }

Änwar كيبشاق الشاب
есть входные данные, один из аргументов это динами...

Тогда собираете три массива, распакуете через unnest и делаете select func(arg1, arg2, arg3) from unnest(...). Соответственно в запрос передаёте три параметра с этими массивами.

Änwar كيبشاق الشاب
нет, с этим совсем нет проблем

Ну так сделайте так, если с этим проблем нет. Не думаю что есть вариант лучше, вот конкретный пример. WITH data(dynQuery, arg, otherArg) AS ( SELECT * FROM UNNEST( ARRAY['DynQuery1', 'DynQuery2'], ARRAY['arg1', 'arg2'], ARRAY['otherArg1', 'otherArg2'] ) ) SELECT func(dynQuery, arg, otherArg) FROM data Три массива биндите через параметры запроса.

Andrei Ilinskii
Ну так сделайте так, если с этим проблем нет. Не д...

Этот пример, соответственно, эквивалентен вашему: func('DynQuery1', 'arg1', 'otherArg1'); func('DynQuery2', 'arg2', 'otherArg2'); При этом у вас всегда один и тот же statement. Будет корректно работать prepared + будет удобно работать с аналитикой запросов в базу. Результаты все получите.

Änwar-كيبشاق الشاب Автор вопроса
Andrei Ilinskii
Этот пример, соответственно, эквивалентен вашему: ...

сорри, разобрался, окасса я библиотеку неправильно использую спасибо большое

Änwar كيبشاق الشاب
сорри, разобрался, окасса я библиотеку неправильно...

У вас в любом случае тонна мелких запросов и вы говорите что это в рамках транзакции. Это хуже, чем мой вариант, т.к. мой вариант будет работать быстрее (один запрос vs много запросов), соответственно транзакция завершится быстрее, соответственно меньше локов в базе.

Änwar-كيبشاق الشاب Автор вопроса
Andrei Ilinskii
У вас в любом случае тонна мелких запросов и вы го...

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

Änwar كيبشاق الشاب
как я понял, в самом бд нет понятия батч запросов?

Верно. Батчи нужно собирать самому, по примеру выше.

Änwar-كيبشاق الشاب Автор вопроса
Andrei Ilinskii
Верно. Батчи нужно собирать самому, по примеру выш...

🤔🤔🤔🤔 https://github.com/jackc/pgx/blob/3599f646293c1b0d381214ab26895abb9f605bc8/conn.go#L730

Änwar كيبشاق الشاب
🤔🤔🤔🤔 https://github.com/jackc/pgx/blob/3599f64629...

Ну как бы это обёртка Го, смотрите в код =) for _, bi := range b.items {

Änwar كيبشاق الشاب
🤔🤔🤔🤔 https://github.com/jackc/pgx/blob/3599f64629...

Чтобы не сомневаться - сделайте benchmark. Гошный SendBatch и мой запрос отдельный. Сравните latency.

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

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

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
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
в JclConsole объявлено так: function CtrlHandler(CtrlType: DWORD): BOOL; stdcall; - где ваше объявление с stdcall? у вас на картинке нет stdcall
Karagy
8
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
~ 2m21s  nix shell github:nixos/nixpkgs#stack ~  stack ghc -- --version error: … while calling the 'derivationStrict' builtin at /builtin/derivation.nix:...
Rebuild your mind.
6
Карта сайта