2025年9月25日: PostgreSQL 18 釋出!
支援的版本: 當前 (18) / 17 / 16 / 15 / 14 / 13
開發版本: devel
不支援的版本: 12

附錄 K. PostgreSQL 限制

表 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 位元組,因此無法放入堆頁面。像 textvarcharchar 這樣的型別中的可變長度欄位,當其值足夠大時,其值可以儲存在表的 TOAST 表中。在表堆中的元組內只需要保留一個 18 位元組的指標。對於較短的可變長度欄位,可以使用 4 位元組或 1 位元組的欄位頭,並且該值儲存在堆元組內。

從表中刪除的列也會計入最大列數限制。此外,雖然為新建立的元組刪除的列值在元組的 NULL 點陣圖中被內部標記為 NULL,但 NULL 點陣圖也佔用空間。

每張表理論上最多可以儲存 2^32 個“離線”值;有關離線儲存的詳細討論,請參見 第 66.2 節。此限制源於使用 32 位 OID 來標識每個這樣的值。實際限制遠小於理論限制,因為隨著 OID 空間的填滿,找到一個仍然可用的 OID 可能會變得昂貴,進而減慢 INSERT/UPDATE 語句的速度。通常,這隻會在包含大量資料的表中成為問題;分割槽是一種可能的解決方法。

提交更正

如果您在文件中發現任何不正確的內容、與您對特定功能的實際體驗不符的內容或需要進一步說明的內容,請使用 此表格 報告文件問題。