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

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

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

11 ответов

4 просмотра

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

Джан-Михаил Автор вопроса
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 -- не решает" -- говорит о том, что Вы, во-первых не сильны в объяснениях, а во-вторых решаете какую-то задачу. Притом не ту, которая написана. Начните формулировать ту, которую решаете, если хотите чтобы она была решэна.

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

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

Такой вопросец - есть функция function MySuperDuperConcat(const a: array of AnsiString): AnsiString; Как мне в её теле сделать вот так? Result:=Concat(a); А не грустный вариан...
notme
15
Есть какой-нибудь для Delphi/FPC T*Compression(Decompression)Stream на базе LZ4/Zstd/любой другой быстрый(и хорошо сжимающий) алгоритм А ещё лучше в pure pascal А ещё лучше од...
notme
48
type TObj = object procedure Init; virtual; end; TObj1 = object(TObj) procedure Init; override; end; procedure TObj1.Init; begin inherited; end; procedur...
Alexander 👋
29
А чем вам питонисты не угодили?😂
.
79
Вот смотрите у меня есть два стрима сейчас fs, cs: TStream; fs := TFileStream.Create('filename'); cs := TCompressionStream.Create(compression_level, fs); Я хочу сделать так: ...
notme
5
Всем привет, написал код ниже, но он выдает сегфолт, в чем причина? #include <stdio.h> #include <stdlib.h> #include <string.h> struct product { char *name; float price; };...
buzz базз
83
Можно ли загрузить скрипт py в бота чтобы он работал по нему? как это сделать?
huskadam #RCC Фанат? @hitlerpvp
13
Всем здравствуйте! Я хотел узнать сколько стоит средняя месячная зарплата у Electron js разработчиков? Мне очень это важно и нужно, плиз помогите узнать эту инфу! Для Джунио...
U.K.
10
Hello. Could you please help me with finding all coordinates within a radius using a spatial index, given that I have a table with coordinates? SET @lng = 37.57925; SET @lat ...
Rinchin G
8
free(NULL) это UB?
#
8
Карта сайта