sql >> データベース >  >> RDS >> PostgreSQL

pg_column_sizeをoctet_lengthより小さくするにはどうすればよいですか?

    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)
    



    1. 一般的なクエリを列として保存しますか?

    2. MySQLINSERTおよびSELECT優先順位

    3. 文字列内のMySQLの2番目(または3番目)のインデックス

    4. データベースの関係が原因でデータベースへの挿入が機能しない