2025年9月25日: PostgreSQL 18 釋出!

PostgreSQL 18 釋出!

釋出於 2025-09-25,作者:PostgreSQL 全球開發組
PostgreSQL 專案

今日,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 年的開源開發,已成為所有規模組織的優選開源關係資料庫。

引入非同步 I/O

PostgreSQL 之前依賴於作業系統預讀機制來加速資料檢索。然而,由於作業系統缺乏對資料庫特定訪問模式的洞察,它們無法始終預料到需要哪些資料,從而導致許多工作負載的效能不佳。

PostgreSQL 18 引入了一個新的非同步 I/O (AIO) 子系統,旨在解決這一限制。AIO 允許 PostgreSQL 同時發出多個 I/O 請求,而不是按順序等待每個請求完成。這擴充套件了現有的預讀功能,並提高了整體吞吐量。PostgreSQL 18 中支援的 AIO 操作包括順序掃描、點陣圖堆掃描和 vacuum。基準測試已顯示在某些場景下效能提升高達 3 倍。

新的 io_method 設定允許您在 workerio_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 引入了 虛擬生成列,它們在查詢時計算值而不是儲存它們。這是生成列的預設選項。此外,已儲存的生成列現在可以進行邏輯複製。

此版本為 INSERTUPDATEDELETEMERGE 命令的 RETURNING 子句 添加了訪問先前值 (OLD) 和當前值 (NEW) 的能力。PostgreSQL 18 還透過 uuidv7() 函式支援 UUIDv7 生成,允許您生成時間戳排序的隨機 UUID,以支援更好的快取策略。PostgreSQL 18 將 uuidv4() 作為 gen_random_uuid() 的別名。

PostgreSQL 18 為 PRIMARY KEYUNIQUE 約束添加了 時間範圍約束(範圍上的約束),使用 WITHOUT OVERLAPS 子句;為 FOREIGN KEY 約束添加了時間範圍約束,使用 PERIOD 子句。

最後,PostgreSQL 18 使使用 CREATE FOREIGN TABLE ... LIKE 命令,透過本地表的定義更容易建立外部表的模式定義。

改進文字處理

PostgreSQL 18 透過多項新增強功能,使文字處理更加輕鬆快捷。此版本添加了 PG_UNICODE_FAST 排序規則,它為大小寫轉換提供完整的 Unicode 語義,同時有助於加速許多比較。這包括 upperlower 字串比較函式,以及用於不區分大小寫比較的新 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_fdwdblink 進行 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

PostgreSQL 是全球最先進的開源資料庫,擁有由成千上萬的使用者、貢獻者、公司和組織組成的全球社群。自 40 多年前在加州大學伯克利分校起源以來,PostgreSQL 一直保持著無與倫比的發展步伐。PostgreSQL 成熟的功能集不僅可以與頂級專有資料庫系統相媲美,而且在高階資料庫功能、可擴充套件性、安全性和穩定性方面甚至超越了它們。

連結