表 K.1にPostgreSQLの様々なハード制限を示します。 しかしながら、絶対的なハード制限に達する前に、パフォーマンスの制限や利用可能なディスク容量などの実際の制限が適用されるかもしれません。
表K.1 PostgreSQLの制限
項目 | 上限 | コメント |
---|---|---|
データベースの大きさ | 無制限 | |
データベースの数 | 4,294,950,911 | |
データベース当たりのリレーション | 1,431,650,303 | |
リレーションの大きさ | 32 TB | BLCKSZ がデフォルトの8192バイトの場合。 |
テーブル当たりの行 | 4,294,967,295ページに収まるタプルの数により制限されます。 | |
テーブル当たりの列 | 1600 | 1ページに収まるタプルの大きさによりさらに制限されます。以下の注意書きを参照してください。 |
フィールドの大きさ | 1 GB | |
識別子の長さ | 63バイト | PostgreSQLを再コンパイルすることで増やせます。 |
テーブル当たりのインデックス | 無制限 | データベース当たりの最大リレーションで制限されます。 |
インデックス当たりの列 | 32 | PostgreSQLを再コンパイルすることで増やせます。 |
パーティションキー | 32 | PostgreSQLを再コンパイルすることで増やせます。 |
格納されるタプルが8192バイトの1つのヒープページに収まらないといけませんので、テーブル当たりの列の最大数はさらに少なくなります。
例えば、タプルヘッダを除いて、1600のint
の列は6400バイトを消費しますのでヒープページ1つに収まりますが、1600のbigint
の列は12800バイトを消費しますのでヒープページ1つの中には収まりません。
text
、varchar
、char
のような可変長の型のフィールドは、その必要があるほど値が長くなれば、行に収まらないその値をテーブルのTOASTテーブルに格納します。
18バイトのポインタだけがテーブルのヒープのタプル内に残ります。
より短い長さの可変長フィールドでは、4バイトまたは1バイトのフィールドヘッダが使われ、値はヒープタプルの中に格納されます。
テーブルから削除された列も列の上限の一因となります。 さらに、新しく作られたタプルに対する削除された列の値は、内部ではタプルのNULLビットマップにNULLと印を付けられますが、NULLビットマップも容量を占めます。