2010-09-27 2 views
24

Я знаю, что в SQL можно сжать текстовое поле, как следующее:Текст сжатия в PostgreSQL

CREATE TABLE TableName (FieldName CHARACTER(255) WITH COMPRESSION); 

Я хочу знать, как достичь текста компрессию в Postgres.

+0

Для хранения сжатой строки см. Также http://stackoverflow.com/q/2958073/287948 –

ответ

26

Сжатие включено по умолчанию для всех типов строк, вам не нужно сообщать базе данных об этом. Проверьте руководство о TOAST

  • ОБЫЧНЫХ предотвращает либо сжатие или вне линии хранения; кроме того, он отключает использование однобайтовых заголовков для типов varlena. Это единственная возможная стратегия для столбцов типов данных, не соответствующих TOAST.
  • EXTENDED позволяет использовать как сжатие, так и внеочередное хранилище. Это значение по умолчанию для большинства TOAST-данных . Сначала будет выполнено сжатие , а затем внебиржевое хранилище, если строка по-прежнему слишком велика.
  • EXTERNAL позволяет хранить в автономном режиме , но не компрессировать. Использование внешних сделают подстроку операций по широким текстовым и BYTEA колонка быстрее (при неустойке увеличения хранения пространства), поскольку эти операции оптимизированных для извлечения только требуемые части стоимости из-строки, когда он не сжимается.
  • MAIN разрешает сжатие, но не внеочередное хранилище. (На самом деле, вне линии хранения по-прежнему будет выполняется для таких колонок, но только в крайнем случае, когда нет другой способ сделать ряд небольшой достаточно, чтобы поместиться на странице.)
+5

Из документов, похоже, TOAST-сжатие активно только для значений, больших более 2 КБ. Пример OP не попадет в порог 2k и, следовательно, не будет сжат. –

+0

Вы можете обеспечить сжатие, зависит от параметров хранения: http://www.postgresql.org/docs/current/interactive/storage-toast.html –

+1

Изменяя TOAST_TUPLE_THRESHOLD? Я думаю, что это требует перекомпиляции? –

Смежные вопросы