
У меня есть большая таблица postgresql, которая, как мне кажется, начала раздуваться, и я хотел бы это исправить. Обычно я могу сделать VACUUM FULL
или CLUSTER
, но мне интересно, смогу ли я исправить раздувание, не влияя на производительность чтения/записи.
Если индекс раздулся, я могу (вручную) создать новый индекс параллельно, который индексирует то же самое, что и старый, но с другим именем, и когда он будет создан, я смогу удалить старый, раздутый. Это позволяет мне исправить раздувание индекса с минимальным влиянием на использование в производстве (поскольку там всегда есть индекс, а чтение и запись не блокируются).
Есть ли какой-либо подобный подход, который работал бы для таблиц? Я мог бы CREATE TABLE newtable LIKE old_bloated_table INCLUDING ...
, что создало бы таблицу заново. Затем удаление и переименование. Но данные могут быть не синхронизированы. Есть ли способ гарантировать, что данные будут одинаковыми между таблицами? (В случае индекса индекс всегда будет синхронизирован с таблицей).