[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 メーリングリストの案内