2013-04-13 19 views
7

Postgres'teki TEXT alanlarında bazı büyük XML belgelerini saklıyorum ve TOAST'un bunları ne kadar verimli sıkıştırdığını bulmaya çalışıyorum. Benim için, bu belgelerin zaman içinde nasıl arşivleneceğine dair nihai bir karar vermek için TOAST'un sıkıştırma oranının ne kadar yakın olabileceğini anlamak istediğim için 51 kb'ye sıkıştırılmış bir 2.2mb XML belgesine sahibim.Postgres'te büyük bir TEXT alanının ne kadar büyük olduğunu nasıl öğrenebilirim?

Postgres'te belirli bir sütunun TOAST sıkıştırılmış boyutunu ve bunun gibi satırları tanımlamamı sağlayan bir işlev var mı?

cevap

7

TOASTed boyutu için pg_column_size ürününü, dokunulmamış boyutta octet_length istersiniz. pg_column_size, system administration functions section of the documentation’dur. Daha fazla bilgi için dokümanlar ve this question'a bakın.

Örnek:

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

Teşekkürler! Bu sayılara dayanarak çok karşılaştırılabilir. Harici saklanan zip dosyaları ile uğraşırken, ihtiyaçlar için mükemmel olan 81 kb'ye kadar bir 2.2mb belge sıkıştırdı. – brightball

+0

@aramisbear Beklediğim şey bu; TOAST, basit bir LZ-flavor sıkıştırma şeması kullanır ve düşük CPU maliyeti ile beklenmedik patenti ve nispeten düşük bir sıkıştırma oranı kullanır. Gelecekte deflate (zip ve gzip tarafından kullanılan sıradan şema) için tartışma tartışıldı, ancak sesler tarafından mevcut şema ile yeterince iyi bir sonuç elde edersiniz. –

2

Aslında dosyayı inceleyebilir: (varsa)

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

Bu masa ve onunla ilişkili tost tablosunun OID'lerini üretir. Veri dizininizdeki dosya sisteminde dosya isimleri olarak görev yaparlar. Gidip onlara bakabilirsin. Veri dizininde:

kullanılan sıkıştırma tekniği sıkıştırma teknikleri LZ ailesinin oldukça basit ve çok hızlı üye geçerli:

find . -name '216738' 

Ve burada the manual about the compression technique bir alıntı. Detaylar için bkz. src/backend/utils/adt/pg_lzcompress.c.