Поддерживает ли PostgreSQL прозрачное сжатие таблиц (фрагментов)?

Я собираюсь хранить большое количество данных (журналов) в фрагментированных таблицах PostgreSQL (таблица в день). Я хотел бы сжать некоторые из них, чтобы сэкономить место на моих дисках, но я не хочу потерять возможность запросить их обычным способом.

Поддерживает ли PostgreSQL такое прозрачное сжатие и где я могу прочитать об этом более подробно? Я думаю, что должно быть какое-то известное волшебное название такой функции.

Спасибо.

Ответ 1

Да, PostgreSQL сделает это автоматически для вас, когда они превысят определенный размер. Сжатие применяется при каждом отдельном значении данных, но не на полном уровне таблицы. Это означает, что если у вас есть миллиард строк, которые очень узкие, они не будут сжаты. Или, если у вас очень много столбцов, каждая из которых имеет лишь небольшое значение, они не будут сжаты. Подробнее об этой схеме в руководстве .

Если вам это нужно на уровне полной таблицы, решение состоит в том, чтобы создать TABLESPACE для тех таблиц, которые вы хотите сжать, и указать на сжатую файловую систему. Пока файловая система по-прежнему подчиняется fsync() и стандартной семантике POSIX, это должно быть абсолютно безопасным. Подробнее об этом в руководстве.

Ответ 3

Кроме того, что конкретно вы не запрашивали, но может оказать некоторую помощь с большими наборами данных, PostgreSQL поддерживает наследование таблиц, позволяющее разбивать ваши данные, например, на диапазоны дат. Или какая-то другая логика.