付録K PostgreSQLの制限

表 K.1PostgreSQLの様々なハード制限を示します。 しかしながら、絶対的なハード制限に達する前に、パフォーマンスの制限や利用可能なディスク容量などの実際の制限が適用されるかもしれません。

表K.1 PostgreSQLの制限

項目上限コメント
データベースの大きさ無制限 
データベースの数4,294,950,911 
データベース当たりのリレーション1,431,650,303 
リレーションの大きさ32 TBBLCKSZがデフォルトの8192バイトの場合。
テーブル当たりの行4,294,967,295ページに収まるタプルの数により制限されます。 
テーブル当たりの列16001ページに収まるタプルの大きさによりさらに制限されます。以下の注意書きを参照してください。
フィールドの大きさ1 GB 
識別子の長さ63バイトPostgreSQLを再コンパイルすることで増やせます。
テーブル当たりのインデックス無制限データベース当たりの最大リレーションで制限されます。
インデックス当たりの列32PostgreSQLを再コンパイルすることで増やせます。
パーティションキー32PostgreSQLを再コンパイルすることで増やせます。

格納されるタプルが8192バイトの1つのヒープページに収まらないといけませんので、テーブル当たりの列の最大数はさらに少なくなります。 例えば、タプルヘッダを除いて、1600のintの列は6400バイトを消費しますのでヒープページ1つに収まりますが、1600のbigintの列は12800バイトを消費しますのでヒープページ1つの中には収まりません。 textvarcharcharのような可変長の型のフィールドは、その必要があるほど値が長くなれば、行に収まらないその値をテーブルのTOASTテーブルに格納します。 18バイトのポインタだけがテーブルのヒープのタプル内に残ります。 より短い長さの可変長フィールドでは、4バイトまたは1バイトのフィールドヘッダが使われ、値はヒープタプルの中に格納されます。

テーブルから削除された列も列の上限の一因となります。 さらに、新しく作られたタプルに対する削除された列の値は、内部ではタプルのNULLビットマップにNULLと印を付けられますが、NULLビットマップも容量を占めます。