Размер таблицы и текст массива [] в postgresql
Хорошо, вот вопрос. У меня есть таблица, которую я создаю как
создать математику таблицы (id1 bytea, id2 bytea, текст комментария [])
есть больше столбцов, но это незначительно. После создания я вставляю туда ~500 тыс. Строк и модифицирую их несколькими запросами, каждый из которых содержит
array_append (комментарии, "Некоторые комментарии о текущем шаге вычислений")
И после того, как все сделано, я получаю таблицы размером около 1,6 ГБ
Если тогда я бегу
ALTER TABLE математика ALTER COLUMN комментарии ТИП varchar[] ИСПОЛЬЗОВАНИЕ комментарии::varchar[];
размер таблицы значительно падает, примерно до 300 МБ
Почему это происходит? И как я могу получить похожий результат без изменения типа столбца?
примечание: я пытался установить для столбца тип varchar[] при создании, но после выполнения всех запросов он все еще становится размером 1,6 ГБ, а преобразование в текст [] снова уменьшает его до 300 МБ.
1 ответ
ALTER TABLE .. ALTER TYPE ..
выполняет полную перезапись таблицы, которая сжимает таблицу и индексы.
Вы получите тот же результат от VACUUM FULL tablename;
вместо.
text
а также varchar
иметь абсолютно одинаковое хранилище