Размер таблицы и текст массива [] в 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 иметь абсолютно одинаковое хранилище

Другие вопросы по тегам