2013-04-13 1 views
7

Я храню некоторые большие XML-документы в полях TEXT в Postgres, и я пытаюсь выяснить, насколько эффективно TOAST их сжимает. У меня есть XML-документ размером 2,2 МБ, который может быть заархивирован до 51 КБ, поэтому я хочу понять, насколько близко коэффициент сжатия TOAST может соответствовать ему, чтобы принять окончательное решение о том, как я буду архивировать эти документы с течением времени.Как узнать, как большое поле TEXT в Postgres?

Есть ли функция в Postgres, которая позволит мне определить сжатый размер TOAST для определенного столбца и строки следующим образом?

ответ

7

Вы хотите pg_column_size для TOASTed размер, octet_length для поджаренного размера. pg_column_size находится в system administration functions section of the documentation. Дополнительную информацию см. В документах и ​​this question.

Пример:

craig=> CREATE TABLE toastdemo(x text); 
CREATE TABLE 
craig=> insert into toastdemo(x) select * from repeat('abcdef',1000); 
INSERT 0 1 
craig=> select pg_column_size(x), pg_column_size(repeat('abcdef',1000)) FROM toastdemo; 
pg_column_size | pg_column_size 
----------------+---------------- 
      84 |   6004 
(1 row) 
+0

Спасибо! Исходя из этих цифр, это очень сопоставимо. Он сжал документ размером 2,2 МБ до 81 КБ, что идеально подходит для моих потребностей по сравнению с работой с файлами zip-файлов, хранящихся в других местах. – brightball

+0

@aramisbear Вот о чем я бы ожидал; TOAST использует простую схему сжатия LZ-аромата с низкой стоимостью процессора без оставшихся патентов и относительно низкой степени сжатия. Обсуждалось переключение на дефляцию (обычная схема, используемая zip и gzip) в будущем, но вы получаете достаточно хороший результат с существующей схемой звуками. –

2

Вы можете фактически просмотреть файл:

SELECT oid AS table_name, reltoastrelid AS toast_tbl_name 
FROM pg_class 
WHERE oid = 'mytbl'::regclass 

Это производит OIDs таблицы и таблицы тоста, связанные с ним (если таковой существует). Они служат именами файлов в файловой системе в вашем каталоге данных. Вы можете просто взглянуть на них. В каталоге данных:

find . -name '216738' 

А вот цитата из the manual about the compression technique:

Метод сжатия используется довольно простой и очень быстрый член семейства LZ методов сжатия. См. src/backend/utils/adt/pg_lzcompress.c для получения более подробной информации.

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