[pgsql-jp: 29287] Re: [結論]Tuple Size 計算とfield数

sugita @ sra.co.jp sugita @ sra.co.jp
2003年 3月 6日 (木) 01:05:08 JST


  杉田です。

From: tec <tec-info @ doevery.com>
Subject: [pgsql-jp: 29286] [結論]Tuple Size 計算とfield数
Date: Wed, 05 Mar 2003 23:52:28 +0900

;;; ★postgresql7.2の場合、デフォルトのfield数上限は1600
;;;  Tuple Size合計は8136

  タプルサイズについては、char(1) * n の場合についてのみです。

    CREATE TABLE class1 (message text);
    INSERT INTO class1 VALUES (rpad('x', 100000, 'y'));

というような場合にはデータが圧縮されるので、『データ量としてのタプルサイズ』は
100000 で、ファイル上は 1186 です。さらに増やし

    INSERT INTO class1 VALUES (rpad('x', 1000000, 'y'));

こうすると TOAST が使われるので、ファイル上は 48 になります。

;;; ★1fieldに必要なデータ量は
;;;   4+(指定サイズ/4)*4
;;;   言い換えれば、サイズは(特にchar型の場合は)4bytes単位で
;;;  指定したほうが得。

  谷田さんのご指摘のように、7.2 以降は、char は文字数で、バイト数ではないので 
4 バイト単位での指定はできないのです。

> http://www.postgresql.jp/document/pg721doc/user/datatype.html
> http://www.postgresql.jp/document/pg721doc/user/datatype-character.html

  また、integer は 4、bool は 1 などデータ型によって違います。谷田さんが挙げら
れたドキュメントに詳しい説明があります。

  言えるのは、char(1) * n というようなあまりに無駄が多いような場合があり得ると
いうことでいいんじゃないですか。


Kenji Sugita                                      




pgsql-jp メーリングリストの案内