|
Хранимая процедура с прогрессом
|
|||
---|---|---|---|
#18+
Всем доброго дня. Прошу направить, как правильнее сделать. Задача такая: Есть 50тысяч клиентов. Необходимо написать процедуру, смысл которой Берем первую с 1 по 1000 клиентов, собираем по ним все данные, делам по каждому кучу работы, данные складываем в другие таблицы, делаем коммит. Берем первую с 1001 по 2000 клиентов, собираем по ним все данные, делам по каждому кучу работы, данные складываем в другие таблицы, делаем коммит. и тд Вся процедура будет выполняться несколько часов, поэтому в IDE ее выполнить не получится, придется запускать в линуксе в режиме screen. Основные вопросы - как правильнее написать чтоб через каждые 1000 строк делать коммит и как выводить прогресс, то есть отношение обработанных клиентов к общему числу клиентов. На postgresql такое не сделать? Писать скрипт например на питоне? ... |
|||
:
Нравится:
Не нравится:
|
|||
28.01.2021, 09:43 |
|
Хранимая процедура с прогрессом
|
|||
---|---|---|---|
#18+
создать таблицу в которую хранимка будет писать ID обработанных клиентов. в случае сбоя при перезапуске начинать со следующего необработанного. мониторить запросами к этой таблице ... |
|||
:
Нравится:
Не нравится:
|
|||
28.01.2021, 16:45 |
|
Хранимая процедура с прогрессом
|
|||
---|---|---|---|
#18+
Misha111 создать таблицу в которую хранимка будет писать ID обработанных клиентов. в случае сбоя при перезапуске начинать со следующего необработанного. мониторить запросами к этой таблице коммит будет только в конце процедуры и в этой таблице данные мы увидим только после того, как процедура полностью отработает. Так можно было бы и по таблицам смотреть, куда данные по каждому клиенту складываются. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.01.2021, 13:51 |
|
Хранимая процедура с прогрессом
|
|||
---|---|---|---|
#18+
kliff Misha111 создать таблицу в которую хранимка будет писать ID обработанных клиентов. в случае сбоя при перезапуске начинать со следующего необработанного. мониторить запросами к этой таблице коммит будет только в конце процедуры и в этой таблице данные мы увидим только после того, как процедура полностью отработает. Так можно было бы и по таблицам смотреть, куда данные по каждому клиенту складываются. ну так используйте не функцию а процедуру где можно commits делать https://www.postgresql.org/docs/13/plpgsql-transactions.html или через dblink дергайте своей функцией в цикле другую функцию которая по 1000 клиентов обрабатывает (такой себе костыль для замены процедур с транзакциями на старых версиях базы). при этом все равно нужно где то в базе тречить прогресс потому что откатывать закомиченное если у вас на полпути процесс оборвется никто не будет. -- Maxim Boguk лучшая поддержка PostgreSQL: dataegret.ru ... |
|||
:
Нравится:
Не нравится:
|
|||
29.01.2021, 17:09 |
|
|
start [/forum/topic.php?fid=53&msg=40039898&tid=1994228]: |
0ms |
get settings: |
10ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
53ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
52ms |
get tp. blocked users: |
2ms |
others: | 15ms |
total: | 171ms |
0 / 0 |