в результат ответ сколько вставлено,
в случае с insert по частям как получать ответы?
Скажите, а что у вас за задача? Просто изначально я решил, что у вас есть файл на 100 млн строк, который вы хотите в таблицу записать. Потом я понял, что вы, видимо, из одной таблицы в другую хотите записать. Если второе, то при чём тут java? Этот перенос данных - не разовая операция, а будет делаться на регулярной основе - и нужно видеть прогресс?
Можно замутить LISTEN/NOTIFY. Читайте официальную документацию.
разовая, но на проде ждать час и не видеть результат не айс insert вызывается из приложения - можно добавить offset + limit + order by но думал можно как-то из функции или процедуры получать результаты
спасибо, почитаю
https://www.postgresql.org/docs/current/sql-listen.html
Если это разовая операция, то почему она вызывается из приложения? Т.е. вы для разовой операции в БД выпустите отдельный релиз приложения?
один раз загрузка массовая поэтому записей 100млн, обычно несколько тысяч
Они в роде тоже работают по итогу транзакции, а не в ходе её исполнения.
Whenever the command NOTIFY channel is invoked, either by this session or another one connected to the same database, all the sessions currently listening on that notification channel are notified, and each will in turn notify its connected client application.
Да они транзакционные
Мда... проще процедуру написать по копирования и в ней писать в табличку для логов ход и процент выполнения.
ну да я за это и спросил не писал кто-нибудь что-то подобного, только как лог в вызывающее приложение отправить?
Вы серьёзно? Тут вообще код писать не нужно, это же одна команда sql 🙂 Открыл вторую сессию в psql запустил там LISTEN и вуаля
Он ничего не получит до commit
А там будет коммит в конце каждого чанка.
Там это в приложении?)
Подсказываю народную мудрость, подсмотренную у ораклистов: perform set_config('application_name', my migration: ' || chunks_done || ' / ' || chunks_expected); Не надо никаких коммитов, всё доступно сразу через мониторинг сессий, можно выставлять в функции.
Хорошая идея, спасибо что напомнили. А в оракле ещё есть вьюха v$session_longops для отслеживания прогресса.
Обсуждают сегодня