表 K.1 描述了 PostgreSQL 的各種硬性限制。但是,在達到絕對硬性限制之前,可能會出現實際限制,例如效能限制或可用磁碟空間。
表 K.1. PostgreSQL 限制
項 | 上限 | 註釋 |
---|---|---|
資料庫大小 | 無限制 | |
資料庫數量 | 4,294,950,911 | |
每個資料庫的關係數量 | 1,431,650,303 | |
關係大小 | 32 TB | 使用預設的 BLCKSZ (8192 位元組) |
每張表的行數 | 受限於能夠放入 4,294,967,295 頁的元組數量 | |
每張表的列數 | 1,600 | 受限於元組大小能放入單個頁面;參見下方的說明 |
結果集中的列數 | 1,664 | |
欄位大小 | 1 GB | |
每張表的索引數量 | 無限制 | 受限於每個資料庫的最大關係數量 |
每個索引的列數 | 32 | 可以透過重新編譯 PostgreSQL 來增加 |
分割槽鍵 | 32 | 可以透過重新編譯 PostgreSQL 來增加 |
識別符號長度 | 63 位元組 | 可以透過重新編譯 PostgreSQL 來增加 |
函式引數 | 100 | 可以透過重新編譯 PostgreSQL 來增加 |
查詢引數 | 65,535 |
一張表的最大列數會進一步減少,因為要儲存的元組必須能夠放入單個 8192 位元組的堆頁面。例如,排除元組頭,一個由 1,600 列 int
組成的元組會佔用 6400 位元組,可以儲存在堆頁面中,但一個由 1,600 列 bigint
組成的元組會佔用 12800 位元組,因此無法放入堆頁面。像 text
、varchar
和 char
這樣的型別中的可變長度欄位,當其值足夠大時,其值可以儲存在表的 TOAST 表中。在表堆中的元組內只需要保留一個 18 位元組的指標。對於較短的可變長度欄位,可以使用 4 位元組或 1 位元組的欄位頭,並且該值儲存在堆元組內。
從表中刪除的列也會計入最大列數限制。此外,雖然為新建立的元組刪除的列值在元組的 NULL 點陣圖中被內部標記為 NULL,但 NULL 點陣圖也佔用空間。
每張表理論上最多可以儲存 2^32 個“離線”值;有關離線儲存的詳細討論,請參見 第 66.2 節。此限制源於使用 32 位 OID 來標識每個這樣的值。實際限制遠小於理論限制,因為隨著 OID 空間的填滿,找到一個仍然可用的 OID 可能會變得昂貴,進而減慢 INSERT/UPDATE 語句的速度。通常,這隻會在包含大量資料的表中成為問題;分割槽是一種可能的解決方法。
如果您在文件中發現任何不正確的內容、與您對特定功能的實際體驗不符的內容或需要進一步說明的內容,請使用 此表格 報告文件問題。