今日,PostgreSQL 全球開發組宣佈釋出 PostgreSQL 18,這是全球最先進開源資料庫的最新版本。本新聞稿的翻譯版本可在 PostgreSQL 18 新聞資料包 中找到。
PostgreSQL 18 透過新的 I/O 子系統提高了所有規模工作負載的效能,該子系統在從儲存讀取時效能提升高達 3 倍,並且還增加了可以使用索引的查詢數量。此版本使主要版本升級更具破壞性,加速了升級時間,並減少了升級完成後達到預期效能所需的時間。開發人員還可以受益於 PostgreSQL 18 的功能,包括在查詢時計算值的虛擬生成列,以及對 UUID 具有更好索引和讀取效能的資料庫友好型 uuidv7()
函式。PostgreSQL 18 透過支援 OAuth 2.0 身份驗證,更易於與單點登入 (SSO) 系統整合。
PostgreSQL 核心團隊成員 Jonathan Katz 表示:“全球開源社群的努力塑造了每一個 PostgreSQL 版本,並幫助交付滿足使用者資料所在位置的功能。“PostgreSQL 18 在專案長期、豐富的交付可靠且強大的資料管理體驗的歷史基礎上,繼續擴充套件其支援的工作負載。”
PostgreSQL 是一種創新型資料管理系統,以其可靠性、健壯性和可擴充套件性而聞名,受益於全球開發者社群近 30 年的開源開發,已成為所有規模組織的優選開源關係資料庫。
PostgreSQL 之前依賴於作業系統預讀機制來加速資料檢索。然而,由於作業系統缺乏對資料庫特定訪問模式的洞察,它們無法始終預料到需要哪些資料,從而導致許多工作負載的效能不佳。
PostgreSQL 18 引入了一個新的非同步 I/O (AIO) 子系統,旨在解決這一限制。AIO 允許 PostgreSQL 同時發出多個 I/O 請求,而不是按順序等待每個請求完成。這擴充套件了現有的預讀功能,並提高了整體吞吐量。PostgreSQL 18 中支援的 AIO 操作包括順序掃描、點陣圖堆掃描和 vacuum。基準測試已顯示在某些場景下效能提升高達 3 倍。
新的 io_method
設定允許您在 worker
和 io_uring
等 AIO 方法之間切換,或者您也可以選擇使用 sync
設定來維持當前 PostgreSQL 的行為。現在有更多引數需要考慮使用 AIO 進行調優,您可以在 文件中瞭解更多。
PostgreSQL 的一項關鍵功能是生成和儲存 統計資訊,這些統計資訊有助於 PostgreSQL 選擇最高效的查詢計劃。在 PostgreSQL 18 之前,這些統計資訊在 主版本升級 時不會保留,這可能導致繁忙系統的查詢效能顯著下降,直到 ANALYZE
執行完成。PostgreSQL 18 引入了在主版本升級期間保留查詢規劃器統計資訊的能力,這有助於升級後的叢集在升級後更快地達到預期效能。
此外,執行主版本升級的實用程式 pg_upgrade
在 PostgreSQL 18 中包含多項增強功能,例如在資料庫包含大量物件(如表和序列)時,升級速度更快。此版本還允許 pg_upgrade
根據 --jobs
標誌的設定並行處理其檢查,並添加了 --swap
標誌,該標誌可以交換升級目錄而不是複製、克隆或連結檔案。
PostgreSQL 18 透過自動加速您的工作負載的功能,進一步提高了查詢效能。此版本在 多列 B-tree 索引 上引入了“跳過掃描”查詢,從而提高了省略一個或多個字首索引列上的 =
條件的查詢的執行時間。它還可以最佳化 WHERE
子句中使用 OR
條件的查詢,使其能夠使用索引,從而顯著加快執行速度。此外,PostgreSQL 在規劃和執行表連線方面也進行了許多改進,從提高雜湊連線的效能到允許合併連線使用增量排序。PostgreSQL 18 還支援 GIN 索引 的並行構建,以及 B-tree 和 BRIN 索引 的連線,以支援此功能。
此版本還基於 PostgreSQL 對硬體加速的支援,包括對 popcount
函式的 ARM NEON 和 SVE CPU 本地指令的支援,該函式由 bit_count
和其他內部功能使用。
PostgreSQL 18 引入了 虛擬生成列,它們在查詢時計算值而不是儲存它們。這是生成列的預設選項。此外,已儲存的生成列現在可以進行邏輯複製。
此版本為 INSERT
、UPDATE
、DELETE
和 MERGE
命令的 RETURNING
子句 添加了訪問先前值 (OLD
) 和當前值 (NEW
) 的能力。PostgreSQL 18 還透過 uuidv7()
函式支援 UUIDv7 生成,允許您生成時間戳排序的隨機 UUID,以支援更好的快取策略。PostgreSQL 18 將 uuidv4()
作為 gen_random_uuid()
的別名。
PostgreSQL 18 為 PRIMARY KEY
和 UNIQUE
約束添加了 時間範圍約束(範圍上的約束),使用 WITHOUT OVERLAPS
子句;為 FOREIGN KEY
約束添加了時間範圍約束,使用 PERIOD
子句。
最後,PostgreSQL 18 使使用 CREATE FOREIGN TABLE ... LIKE
命令,透過本地表的定義更容易建立外部表的模式定義。
PostgreSQL 18 透過多項新增強功能,使文字處理更加輕鬆快捷。此版本添加了 PG_UNICODE_FAST
排序規則,它為大小寫轉換提供完整的 Unicode 語義,同時有助於加速許多比較。這包括 upper
和 lower
字串比較函式,以及用於不區分大小寫比較的新 casefold
函式。此外,PostgreSQL 18 現在支援對使用 不確定性排序規則 的文字進行 LIKE
比較,從而簡化了執行更復雜模式匹配的方式。此版本還更改了 全文搜尋,使其使用叢集的預設排序規則提供程式,而不是始終使用 libc,這可能要求您在執行 pg_upgrade
後重新索引所有 全文搜尋 和 pg_trgm
索引。
PostgreSQL 18 引入了 oauth
身份驗證,它允許使用者透過 PostgreSQL 擴充套件支援的 OAuth 2.0 機制進行身份驗證。此外,PostgreSQL 18 包括對 FIPS 模式 的驗證,並添加了用於配置伺服器端 TLS v1.3 密碼套件的 ssl_tls13_ciphers
引數。
此版本棄用了 md5
密碼身份驗證,該身份驗證將在未來的版本中移除。如果您需要基於密碼的 PostgreSQL 身份驗證,請使用 SCRAM 身份驗證。PostgreSQL 18 還支援使用 postgres_fdw
和 dblink
進行 SCRAM 傳遞身份驗證,以身份驗證到遠端 PostgreSQL 例項。此外,pgcrypto
現在支援 SHA-2 加密用於密碼雜湊。
PostgreSQL 18 支援在日誌和 pg_stat_subscription_stats
檢視中報告邏輯複製寫入衝突。此外,CREATE SUBSCRIPTION
現在預設使用並行流式傳輸來應用事務,這有助於提高效能。pg_createsubscriber
實用程式現在有一個 --all
標誌,因此您可以使用一個命令為例項中的所有資料庫建立邏輯副本。PostgreSQL 18 還允許您自動 刪除空閒複製槽,以幫助防止在釋出者上儲存過多的預寫日誌檔案。
PostgreSQL 18 透過在常規 vacuum 操作期間主動凍結更多頁面來改進其 vacuum 策略,從而減少開銷並有助於需要嚴格 vacuum 的情況。
PostgreSQL 18 為 EXPLAIN
添加了更多詳細資訊,該命令提供有關查詢計劃執行的資訊,並且從此版本開始,它會自動顯示執行 EXPLAIN ANALYZE
時訪問了多少緩衝區(資料儲存的基本單位)。此外,EXPLAIN ANALYZE
現在顯示在索引掃描期間發生了多少索引查詢,而 EXPLAIN ANALYZE VERBOSE
則包括 CPU、WAL 和平均讀取統計資訊。PostgreSQL 18 在 pg_stat_all_tables
中包含更多有關 vacuum 和相關操作所花費時間的資訊,以及每個連線的 I/O 和 WAL 利用率的統計資訊。
使用 PostgreSQL 18 initdb
初始化的資料庫現在預設啟用頁面校驗和。這可能會影響從未啟用校驗和的叢集升級,使用 pg_upgrade
時,您需要建立一個新的 PostgreSQL 18 叢集並帶有 --no-data-checksums
選項。
PostgreSQL 18 還引入了新版本的 PostgreSQL 線協議(3.2 版本),這是自 PostgreSQL 7.4(2003 年)以來的第一個新協議版本。libpq
預設仍使用 3.0 版本,而客戶端(例如驅動程式、連線池、代理)將支援新協議版本。
PostgreSQL 18 還添加了許多其他新功能和改進,這些功能也可能對您的用例有所幫助。請參閱 發行說明 以獲取新功能和更改功能的完整列表。
PostgreSQL 是全球最先進的開源資料庫,擁有由成千上萬的使用者、貢獻者、公司和組織組成的全球社群。自 40 多年前在加州大學伯克利分校起源以來,PostgreSQL 一直保持著無與倫比的發展步伐。PostgreSQL 成熟的功能集不僅可以與頂級專有資料庫系統相媲美,而且在高階資料庫功能、可擴充套件性、安全性和穩定性方面甚至超越了它們。