Как очистить данные в таблицах PostgreSQL с освобождением места на диске?
Доброго времени суток!
Ситуация такая: есть БД (psql), которая за месяц раздувается до 100Гб, ввиду большого количества данных (за месяц суммарно около 1млрд. строк в таблицах). Место на жестком диске ограничено. После того, как база сожрет все свободное место, что-то с ней сделать у меня не получалось - служба psql не запускается, а удалив что-то из папки data (свободного места на машине нет и ничего удалять, кроме базы, нельзя) - база не восстанавливается. Но вопрос не в этом. Как можно очистить данные в таблицах за определенный период с РЕАЛЬНЫМ освобождением места на диске? Дело в том, что я выполнил DELETE для всех таблиц, удалив записи старше недели (до этого были записи за 3 недели), после чего выполнил VACUUM для всей базы. После этих очень длительных операций, освободилось -500Мб. Именно со знаком минус. Не освободилось АБСОЛЮТНО ничего, а даже наоборот.
P.S: раньше работал с Microsoft SQL, там с такими проблемами никогда не встречался...
The standard form of VACUUM removes dead row versions in tables and indexes and marks the space available for future reuse. However, it will not return the space to the operating system, except in the special case where one or more pages at the end of a table become entirely free and an exclusive table lock can be easily obtained. In contrast, VACUUM FULL actively compacts tables by writing a complete new version of the table file with no dead space. This minimizes the size of the table, but can take a long time. It also requires extra disk space for the new copy of the table, until the operation completes..
Про VACUUM FULL слышал, но чтобы его выполнить, ему нужно место, равное текущему занимаемому. Т.е. в моем случае - должно быть еще 100Гб свободного места, т.к. все таблицы сначала будут скопированы. Есть еще какие-то варианты?
Алексей: вы в своём вопросе абсолютно ничего не указали что слышали про vacuum full, сами виноваты. А "ещё какие-то варианты" в огромном количестве приведены в ссылке, которую я дал. Вам даже лень было дочитать ответ.
Стоит делать фуллвакуум, но опять таки он требует кучи места, то есть если места не осталось совсем то он не сможет нормально пройти.
Логично скопипастить базу на другой сервер где нет проблем с местом.