2011-06-02 31 views
0

我有一個問題,我有一個數據庫中的一列,可能是從10到10,000個字節的大小。你知道PostgreSQL是否支持稀疏數據(即它是否總是在列的每個條目之前留出10,000個字節......或者只有每個條目所需的空間)?PostgresSQL分配的列長度

回答

1

Postgres將存儲長變長類型在擴展的空間存儲稱爲TOAST

在字符串的情況下,它保持內聯up to 126 bytes(可能意味着多字節東西少於126個字符),然後將其發送到外部存儲。

你能看到的數據是使用psql的存儲:

\dt+ yourtable 

順便說一句,注意,從Postgres的角度來看,是絕對聲明一個列的類型爲varchar之間沒有差異(相對於存儲)或varchar(large_number) - 它將以完全相同的方式存儲。但是,由於字符串長度檢查,使用varchar(large_number)的性能損失非常小。

+0

有兩件事情:1)大小超過2K的數據是['TOAST'] [1]'編碼,並可能使用LZ壓縮算法進行壓縮; 2)性能損失可忽略不計,因爲輸入行的值是已知的。 'tuple_size == large_number'是一個時鐘週期,一個指針加載......與IO甚至內存訪問相比,它甚至不是關係數據庫的噪聲。 – Sean 2011-06-02 18:39:48

0

使用varchartext類型 - 這些僅使用實際需要來存儲數據(加2個字節的小的開銷爲每個值存儲長度)