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

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

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

11 ответов

10 просмотров

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

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

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

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

#include <stdio.h> #include <stdlib.h> #include <time.h> void mass_first_generate(int mass[5][7]) {     for (int N = 0; N < 5; N++) {         for (int A = 0; A < 7; A++) {   ...
Чувак
6
https://www.linkedin.com/posts/ugama-benedicta-kelechi-codergirl-103041300_mobiledevelopment-fluttertraining-handsonlearning-activity-7263445699227254784-IdHB?utm_source=share...
CoderGirl
16
Всем привет! Имеется функция: function IsValidChar(ch: UTF8Char): Boolean; var i: Integer; ValidChars: AnsiString; begin ValidChars := 'abcdefghijklmnopqrstuvwxyzABCDE...
Евгений
44
Помогите пожалуйста. Делаю систему плагинов. Проблема сейчас в такая: плагины загружаются в основном потоке. FLibHandle := SafeLoadLibrary(FFileName) Но нужно еще выполнить фу...
Илья 🤣
10
Ну вот просто даже давайте вот как. Какой нибудь конкретный кейс, можете в пример привести, где бч работает и приносит прикладную пользу, а не просто что бы было? Не крипту.
Alexander Andreev
22
объясните пожалуйста, почему функция не работает должным образом? вроде должно брать активное окно сравнивать его размер с размером экрана, и если есть совпадение = true прове...
JF
12
лучше скажите, причём тут паскаль?
Alexey Kulakov
36
Гляньте, че бывает: Сегодня по одному проекту одной вебстудии делал проект небольшой, на их хостинге. На Modx revo. В определенный момент , работая в админке, вдруг перестал р...
Artem
7
Но, может, есть уже проверенная? Наши требования такие: 1. Сообщения должны приходить из Инста в CRM оду 2. Должна быть возможность подключить несколько экаунтов Инстаграм. Р...
Alexander Sharoiko MSE / Александр Шаройко
12
> Копаем глубже > Следующий момент был, когда я спросил его, знает ли он JavaScript. Он ответил, что его учили работать с C#. Я тоже в университете писал на C#, но даже там мн...
Oleg Volkov
4
Карта сайта