Поддерживает ли PostgreSQL прозрачное сжатие таблиц (фрагментов)?
Я собираюсь хранить большое количество данных (журналов) в фрагментированных таблицах PostgreSQL (таблица в день). Я хотел бы сжать некоторые из них, чтобы сэкономить место на моих дисках, но я не хочу потерять возможность запросить их обычным способом.
Поддерживает ли PostgreSQL такое прозрачное сжатие и где я могу прочитать об этом более подробно? Я думаю, что должно быть какое-то известное волшебное название такой функции.
Спасибо.
Ответы
Ответ 1
Да, PostgreSQL сделает это автоматически для вас, когда они превысят определенный размер. Сжатие применяется при каждом отдельном значении данных, но не на полном уровне таблицы. Это означает, что если у вас есть миллиард строк, которые очень узкие, они не будут сжаты. Или, если у вас очень много столбцов, каждая из которых имеет лишь небольшое значение, они не будут сжаты. Подробнее об этой схеме в руководстве .
Если вам это нужно на уровне полной таблицы, решение состоит в том, чтобы создать TABLESPACE для тех таблиц, которые вы хотите сжать, и указать на сжатую файловую систему. Пока файловая система по-прежнему подчиняется fsync() и стандартной семантике POSIX, это должно быть абсолютно безопасным. Подробнее об этом в руководстве.
Ответ 2
Вероятно, не то, что вы имеете в виду, но все еще полезная информация - Глава 53. Физическое хранилище данных в прекрасном руководстве. Раздел TOAST требует дополнительного внимания.
Ответ 3
Кроме того, что конкретно вы не запрашивали, но может оказать некоторую помощь с большими наборами данных, PostgreSQL поддерживает наследование таблиц, позволяющее разбивать ваши данные, например, на диапазоны дат. Или какая-то другая логика.