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

Как в постгресе решают проблему, когда необходимо бежать по курсору

LOOP'ом и фиксировать в цикле каждый INSERT. Т.е. чтобы каждый INSERT коммитился, даже пока не закончилась внешняя транзакция с LOOP' ом?

11 ответов

19 просмотров

Никак. Какой в этом вообще смысл?

Джан-Михаил Автор вопроса
Yaroslav Schekin
Никак. Какой в этом вообще смысл?

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

Джан Михаил
Надо вставить много записей в таблицу. При этом не...

> При этом не хочется держать транзакцию пока там 1,5 ляма инсертов делается. А надо, если это на самом деле транзакция. Т.е. буквально то, о чём Вы спрашивали, невозможно просто потому, что противоречит определению транзакции. И почему не хочется-то, кстати? > Так же не хочется на середине процесса в случае ошибки потерять полляма вставленных записей Тогда можно разделить этот процесс на отдельные транзакции, или же в самом деле использовать SAVEPOINTs (от критических ошибок они не помогут, конечно).

Yaroslav Schekin
> При этом не хочется держать транзакцию пока там ...

Ну на самокате тоже, теоретически, можно доехать до Луны

Джан-Михаил Автор вопроса
Yaroslav Schekin
> При этом не хочется держать транзакцию пока там ...

Нет. 1,5 ляма не нужно вставлять одной транзакцией. Нет такой необходимости. Но если я бегу по записям с помощью курсора внутри функции, то я обременен тем, что это всё делается в транзакции. Как мне сделать, чтобы это были маленькие кусочки. Условно вставки по 1000 штук? Мне не нужно обеспечивать транзакционную вставку 1,5 ляма записей

Джан Михаил
Нет. 1,5 ляма не нужно вставлять одной транзакцией...

Предположу банальность бежать курсором по 1000 записей или не бегать курсором вообще

Джан Михаил
Нет. 1,5 ляма не нужно вставлять одной транзакцией...

Собирайте в приложении батчи по несколько тысяч записей

Джан Михаил
Нет. 1,5 ляма не нужно вставлять одной транзакцией...

> Но если я бегу по записям с помощью курсора внутри функции, то я обременен тем, что это всё делается в транзакции. Да, это неизбежно — управление транзакциями именно в функциях невозможно. Зато возможно в процедурах (если они сами вызываются не в явной транзакции). Может быть, это подойдёт (в таком случае это будут отдельные транзакции, конечно)? Кроме того, курсор можно выполнить однажды (WITH HOLD), и в последующих отдельных транзакциях "дочитывать" из него по 1000 штук.

Масса вариантов, на самом деле. Ваш комментарий "savepoint -- не решает" -- говорит о том, что Вы, во-первых не сильны в объяснениях, а во-вторых решаете какую-то задачу. Притом не ту, которая написана. Начните формулировать ту, которую решаете, если хотите чтобы она была решэна.

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

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

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
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
Карта сайта