मैं कहूंगा कि pg_column_size
TOAST
. के संकुचित आकार की रिपोर्ट कर रहा है ed मान, जबकि octet_length
असम्पीडित आकारों की रिपोर्ट कर रहा है। मैंने फ़ंक्शन स्रोत या परिभाषाओं की जांच करके इसे सत्यापित नहीं किया है, लेकिन यह समझ में आता है, विशेष रूप से संख्याओं के तार काफी अच्छी तरह से संपीड़ित होंगे। आप EXTENDED
. का उपयोग कर रहे हैं भंडारण इसलिए मान TOAST
के लिए योग्य हैं संपीड़न। देखें TOAST
दस्तावेज़ीकरण
।
अपेक्षित डीबी आकार की गणना के लिए, यह बिल्कुल नया प्रश्न है। जैसा कि आप निम्नलिखित डेमो से देख सकते हैं, यह इस बात पर निर्भर करता है कि आपके तार कितने संकुचित हैं।
यहां एक प्रदर्शन दिखाया गया है कि कैसे octet_length
pg_column_size
. से बड़ा हो सकता है , यह दर्शाता है कि TOAST कहाँ से शुरू होता है। सबसे पहले, आइए क्वेरी आउटपुट पर परिणाम प्राप्त करें जहाँ कोई TOAST
नहीं है खेल में आता है:
regress=> SELECT octet_length(repeat('1234567890',(2^n)::integer)), pg_column_size(repeat('1234567890',(2^n)::integer)) FROM generate_series(0,12) n;
octet_length | pg_column_size
--------------+----------------
10 | 14
20 | 24
40 | 44
80 | 84
160 | 164
320 | 324
640 | 644
1280 | 1284
2560 | 2564
5120 | 5124
10240 | 10244
20480 | 20484
40960 | 40964
(13 rows)
अब उसी क्वेरी आउटपुट को एक टेबल में स्टोर करते हैं और संग्रहीत पंक्तियों का आकार प्राप्त करते हैं:
regress=> CREATE TABLE blah AS SELECT repeat('1234567890',(2^n)::integer) AS data FROM generate_series(0,12) n;
SELECT 13
regress=> SELECT octet_length(data), pg_column_size(data) FROM blah;
octet_length | pg_column_size
--------------+----------------
10 | 11
20 | 21
40 | 41
80 | 81
160 | 164
320 | 324
640 | 644
1280 | 1284
2560 | 51
5120 | 79
10240 | 138
20480 | 254
40960 | 488
(13 rows)