Pull to refresh

Comments 8

В MySQL для этого есть готовые утилиты — например pt-online-schema-change.
Есть что-то подобное для Postgres?
Эта утилита немного про другое:
pt-online-schema-change alters a table’s structure without blocking reads or writes.
Я именно про блокировки UPDATE/UPDATE писал.
Есть альтернативное решение для той же задачи?

Скорее всего, в реальном проекте этот код в миграциях/вызовах в прикладном коде просто не пройдет код-ревью, так как разбираться в нем и поддерживать его очень сложно и дорого, а автору предложат переписать, разбив на несколько запросов и перенеся часть логики в прикладной код.

А какой из приведенных запросов настолько сложен, что «разбираться в нем и поддерживать его очень сложно и дорого»? Это, скажем так, не высшая математика, а уровень средней школы.

Хотя, если ревьюер на SQL ничего сложнее SELECT * FROM ... WHERE ... не писал, то проблемы у него возникнут, конечно.

Для обновления или удаления миллионов записей в таблице БД под нагрузкой я сделал себе хранимую процедуру loop_execute(), спрятав все "сложности" внутри. Взял идеи из статьи и развил дальше. Модификация записей происходит пачками в отдельных транзакциях с контролируемым временем блокировки. Для удобства есть режим тестирования, отображение прогресса выполнения в процентах и приблизительного времени окончания работы! На многоядерных серверах распараллеливание в разы увеличивает скорость работы.

Sign up to leave a comment.