pg_column_size
と言います TOAST
の圧縮サイズを報告しています ed値、octet_length
圧縮されていないサイズを報告しています。関数のソースや定義をチェックしてこれを確認していませんが、特に数値の文字列が非常によく圧縮されるため、これは理にかなっています。 EXTENDED
を使用しています 値がTOAST
の対象となるようにストレージ 圧縮。 TOAST
を参照してください ドキュメント
。
予想されるDBサイズの計算に関しては、まったく新しい質問です。次のデモからわかるように、文字列の圧縮性などによって異なります。
これは、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)