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