powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Хранимая процедура с прогрессом
4 сообщений из 4, страница 1 из 1
Хранимая процедура с прогрессом
    #40039556
kliff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем доброго дня. Прошу направить, как правильнее сделать.

Задача такая:
Есть 50тысяч клиентов. Необходимо написать процедуру, смысл которой

Берем первую с 1 по 1000 клиентов, собираем по ним все данные, делам по каждому кучу работы, данные складываем в другие таблицы, делаем коммит.

Берем первую с 1001 по 2000 клиентов, собираем по ним все данные, делам по каждому кучу работы, данные складываем в другие таблицы, делаем коммит.

и тд

Вся процедура будет выполняться несколько часов, поэтому в IDE ее выполнить не получится, придется запускать в линуксе в режиме screen.

Основные вопросы - как правильнее написать чтоб через каждые 1000 строк делать коммит и как выводить прогресс, то есть отношение обработанных клиентов к общему числу клиентов.

На postgresql такое не сделать? Писать скрипт например на питоне?
...
Рейтинг: 0 / 0
Хранимая процедура с прогрессом
    #40039678
Misha111
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
создать таблицу в которую хранимка будет писать ID обработанных клиентов.
в случае сбоя при перезапуске начинать со следующего необработанного.
мониторить запросами к этой таблице
...
Рейтинг: 0 / 0
Хранимая процедура с прогрессом
    #40039898
kliff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Misha111
создать таблицу в которую хранимка будет писать ID обработанных клиентов.
в случае сбоя при перезапуске начинать со следующего необработанного.
мониторить запросами к этой таблице


коммит будет только в конце процедуры и в этой таблице данные мы увидим только после того, как процедура полностью отработает.

Так можно было бы и по таблицам смотреть, куда данные по каждому клиенту складываются.
...
Рейтинг: 0 / 0
Хранимая процедура с прогрессом
    #40039960
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kliff
Misha111
создать таблицу в которую хранимка будет писать ID обработанных клиентов.
в случае сбоя при перезапуске начинать со следующего необработанного.
мониторить запросами к этой таблице


коммит будет только в конце процедуры и в этой таблице данные мы увидим только после того, как процедура полностью отработает.

Так можно было бы и по таблицам смотреть, куда данные по каждому клиенту складываются.


ну так используйте не функцию а процедуру где можно commits делать
https://www.postgresql.org/docs/13/plpgsql-transactions.html

или через dblink дергайте своей функцией в цикле другую функцию которая по 1000 клиентов обрабатывает (такой себе костыль для замены процедур с транзакциями на старых версиях базы).

при этом все равно нужно где то в базе тречить прогресс потому что откатывать закомиченное если у вас на полпути процесс оборвется никто не будет.


--
Maxim Boguk
лучшая поддержка PostgreSQL: dataegret.ru
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Хранимая процедура с прогрессом
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]