バージョンごとのドキュメント一覧

付録K PostgreSQLの制限

<title><productname>PostgreSQL</productname> Limits</title>

<xref linkend="limits-table"/> describes various hard limits of <productname>PostgreSQL</productname>. However, practical limits, such as performance limitations or available disk space may apply before absolute hard limits are reached. 表 K.1PostgreSQLの様々なハード制限を示します。 しかしながら、絶対的なハード制限に達する前に、パフォーマンスの制限や利用可能なディスク容量などの実際の制限が適用されるかもしれません。

表K.1 PostgreSQLの制限

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

The maximum number of columns for a table is further reduced as the tuple being stored must fit in a single 8192-byte heap page. For example, excluding the tuple header, a tuple made up of 1,600 <type>int</type> columns would consume 6400 bytes and could be stored in a heap page, but a tuple of 1,600 <type>bigint</type> columns would consume 12800 bytes and would therefore not fit inside a heap page. Variable-length fields of types such as <type>text</type>, <type>varchar</type>, and <type>char</type> can have their values stored out of line in the table's TOAST table when the values are large enough to require it. Only an 18-byte pointer must remain inside the tuple in the table's heap. For shorter length variable-length fields, either a 4-byte or 1-byte field header is used and the value is stored inside the heap tuple. 格納されるタプルが8192バイトの1つのヒープページに収まらないといけませんので、テーブル当たりの列の最大数はさらに少なくなります。 例えば、タプルヘッダを除いて、1,600のintの列は6400バイトを消費しますのでヒープページ1つに収まりますが、1,600のbigintの列は12800バイトを消費しますのでヒープページ1つの中には収まりません。 textvarcharcharのような可変長の型のフィールドは、その必要があるほど値が長くなれば、行に収まらないその値をテーブルのTOASTテーブルに格納します。 18バイトのポインタだけがテーブルのヒープのタプル内に残ります。 より短い長さの可変長フィールドでは、4バイトまたは1バイトのフィールドヘッダが使われ、値はヒープタプルの中に格納されます。

Columns that have been dropped from the table also contribute to the maximum column limit. Moreover, although the dropped column values for newly created tuples are internally marked as null in the tuple's null bitmap, the null bitmap also occupies space. テーブルから削除された列も列の上限の一因となります。 さらに、新しく作られたタプルに対する削除された列の値は、内部ではタプルのNULLビットマップにNULLと印を付けられますが、NULLビットマップも容量を占めます。

Each table can store a theoretical maximum of 2^32 out-of-line values; see <xref linkend="storage-toast" /> for a detailed discussion of out-of-line storage. This limit arises from the use of a 32-bit OID to identify each such value. The practical limit is significantly less than the theoretical limit, because as the OID space fills up, finding an OID that is still free can become expensive, in turn slowing down INSERT/UPDATE statements. Typically, this is only an issue for tables containing many terabytes of data; partitioning is a possible workaround. 《機械翻訳》各テーブルは、理論上最大2^32個の直線外値を格納できます。 直線外ストレージの詳細については、65.2を参照してください。 この制限は、そのような各値を識別するために32ビットのoidを使用することから生じる。 より小さいスペースが満杯になると、まだoidであるoidを見つけるのにコストがかかり、ダウンINSERT/更新ステートメントの速度が低下する可能性があるため、実際の限界は理論的な限界よりも大幅に低くなります。 フリー通常、これはテーブルにテラバイト単位のデータが含まれている場合にのみ発生する問題であり、パーティショニングを使用することで回避できます。