![Решить проблему раздувания таблиц PostgreSQL, не влияя на чтение/запись?](https://rvso.com/image/668784/%D0%A0%D0%B5%D1%88%D0%B8%D1%82%D1%8C%20%D0%BF%D1%80%D0%BE%D0%B1%D0%BB%D0%B5%D0%BC%D1%83%20%D1%80%D0%B0%D0%B7%D0%B4%D1%83%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F%20%D1%82%D0%B0%D0%B1%D0%BB%D0%B8%D1%86%20PostgreSQL%2C%20%D0%BD%D0%B5%20%D0%B2%D0%BB%D0%B8%D1%8F%D1%8F%20%D0%BD%D0%B0%20%D1%87%D1%82%D0%B5%D0%BD%D0%B8%D0%B5%2F%D0%B7%D0%B0%D0%BF%D0%B8%D1%81%D1%8C%3F.png)
У меня есть большая таблица postgresql, которая, как мне кажется, начала раздуваться, и я хотел бы это исправить. Обычно я могу сделать VACUUM FULL
или CLUSTER
, но мне интересно, смогу ли я исправить раздувание, не влияя на производительность чтения/записи.
Если индекс раздулся, я могу (вручную) создать новый индекс параллельно, который индексирует то же самое, что и старый, но с другим именем, и когда он будет создан, я смогу удалить старый, раздутый. Это позволяет мне исправить раздувание индекса с минимальным влиянием на использование в производстве (поскольку там всегда есть индекс, а чтение и запись не блокируются).
Есть ли какой-либо подобный подход, который работал бы для таблиц? Я мог бы CREATE TABLE newtable LIKE old_bloated_table INCLUDING ...
, что создало бы таблицу заново. Затем удаление и переименование. Но данные могут быть не синхронизированы. Есть ли способ гарантировать, что данные будут одинаковыми между таблицами? (В случае индекса индекс всегда будет синхронизирован с таблицей).