postgers добавлена быстрая поддержка изменения таблиц + нету проблем таких как в mysql
удаляешь данные а файлик бд не схлопывается...
ну а так решаю таким способом
создаем таблицу
create table new_post like post;
добавляем новые поля ( сразу создаем индексы (потом это будет не реально) )
далее выставляем авто инкремент с запасом на 100к+ выше.
далее делаем скрипт копирования
$limit = 10000;
$count = 0;
$lastId = 1; // последний id можно менять ручками ( если скрипт зависнит)
$endId = 70170509; // максимальный ид в таблице, докуда копируем
$sqlTemplate = "insert into new_post ( select id, user_id, text)
from post where id > :lastId: and id < {$endId} order by id ASC limit {$limit})";
$sql = str_replace(':lastId:', $lastId, $sqlTemplate);
while ($res = $connection->createCommand($sql)->execute()) {
$lastId = $connection->createCommand('SELECT id FROM new_post ORDER BY id DESC limit 1')->queryScalar(); // получаем ласт запись в новой таблице
$count += $limit;
file_put_contents($file,
"processed " . number_format($count, 0, '.', ' ') . " rows\nlast id " . $lastId . "\n\n", FILE_APPEND);
$sql = str_replace(':lastId:', $lastId, $sqlTemplate);
}
file_put_contents($file, "--done---\n\n", FILE_APPEND);
далее делаем меняем названия таблицы это операция быстрая.
30 гигов перегоняет за 20 минут.
смотрим разницу и до копируем оставшиеся
это аля аналог инструмента из percona-tool только не тормозит))
UPD
Запускаем скрипт из консоли, лучше всего вызвать
`screen` и сделать это фоново на случаи того если терминал зависит или интерент упадет.
Выбирайте БД под задачу у меня таблица была 120гигов статистики я выбрал аналитическую БД и бед не знаю.