PostgreSQL 12 Beta 1 發布!

張貼於 2019-05-23,作者:PostgreSQL 全球開發團隊
PostgreSQL 專案

PostgreSQL 全球開發團隊宣布 PostgreSQL 12 的第一個 Beta 版本現已可供下載。此版本包含 PostgreSQL 12 最終版本中將提供的所有功能的預覽,但發布的一些細節可能會在此之前發生變化。

秉持開放原始碼 PostgreSQL 社群的精神,我們強烈建議您在資料庫系統中測試 PostgreSQL 12 的新功能,以幫助我們消除可能存在的任何錯誤或其他問題。雖然我們不建議您在生產環境中執行 PostgreSQL 12 Beta 1,但我們鼓勵您尋找方法針對此 Beta 版本執行典型的應用程式工作負載。

您的測試和回饋將有助於社群確保 PostgreSQL 12 版本維護我們提供世界上最先進的開放原始碼關聯式資料庫穩定、可靠版本的標準。

PostgreSQL 12 功能重點

索引效能、功能和管理

PostgreSQL 12 透過改進這些索引的空間管理,提高了標準 B 樹索引的整體效能。除了效能提升之外,這些改進還減少了頻繁修改的 B 樹索引的索引大小。

此外,PostgreSQL 12 增加了並行重建索引的能力,讓您可以執行 REINDEX 操作,而不會封鎖對索引的任何寫入。此功能應有助於處理長時間的索引重建,這些重建可能會在生產環境中管理 PostgreSQL 資料庫時導致停機。

PostgreSQL 12 擴展了多種專用索引機制的性能。建立覆蓋索引的能力,即 PostgreSQL 11 中引入的 INCLUDE 子句,現在已添加到 GiST 索引。SP-GiST 索引現在支援對支援距離 (<->) 運算的資料類型執行 K 最近鄰 (K-NN) 查詢的能力。

在 PostgreSQL 12 中,建立 GiST、GIN 或 SP-GiST 索引時產生的預寫日誌 (WAL) 開銷也顯著減少,這為 PostgreSQL 叢集的磁碟利用率以及持續歸檔和串流複製等功能提供了多項好處。

內聯 WITH 查詢(通用表式)

如果通用表式(又稱 WITH 查詢)a) 不是遞迴的,b) 沒有任何副作用,並且 c) 僅在查詢的後續部分中引用一次,則現在可以自動內聯在查詢中。這消除了自 PostgreSQL 8.4 中引入 WITH 子句以來就存在的「最佳化柵欄」。

如果需要,您可以使用 MATERIALIZED 子句強制 WITH 查詢具體化,例如:

WITH c AS MATERIALIZED ( SELECT * FROM a WHERE a.x % 4 = 0 ) SELECT * FROM c JOIN d ON d.y = a.x;

分割區

PostgreSQL 12 提高了處理具有數千個分割區的表時的效能,這些操作只需要使用少數分割區。

PostgreSQL 12 還提高了 INSERTCOPY 到分割區表中的效能。現在可以在不封鎖分割區表上的並行查詢的情況下執行 ATTACH PARTITION。此外,PostgreSQL 12 現在允許使用外鍵來引用分割區表。

每個 SQL/JSON 規範的 JSON 路徑查詢

PostgreSQL 12 現在允許根據 SQL:2016 標準執行 JSON 路徑查詢。與 XML 的 XPath 表達式類似,JSON 路徑表達式讓您可以評估各種算術表達式和函數,以及比較 JSON 文件中的值。

這些表達式的子集可以使用 GIN 索引加速,從而允許跨 JSON 資料集執行高效能的查詢。

定序

PostgreSQL 12 現在支援 ICU 提供的定序的不區分大小寫和不區分重音符號的比較,也稱為「非決定性定序」。使用時,這些定序可以為比較和排序提供便利,但也可能導致效能降低,因為定序可能需要對字串進行額外的檢查。

最常見值擴充統計資訊

CREATE STATISTICS 在 PostgreSQL 10 中引入,旨在收集多個欄位上更複雜的統計資訊以改進查詢規劃,現在支援最常見值統計資訊。這可以改善非均勻分佈的查詢計畫。

產生欄位

PostgreSQL 12 允許建立產生欄位,這些欄位使用其他欄位的內容透過表達式計算其值。此功能提供儲存的產生欄位,這些欄位在插入和更新時計算並儲存在磁碟上。虛擬產生欄位僅在欄位作為查詢的一部分讀取時計算,尚未實作。

可插拔的表格儲存介面

PostgreSQL 12 引入了可插拔的表格儲存介面,允許建立和使用不同的表格儲存方法。可以使用 CREATE ACCESS METHOD 命令將新的存取方法新增到 PostgreSQL 叢集,然後使用 CREATE TABLE 上的新 USING 子句將其新增到表格。

可以透過建立新的 表格存取方法來定義表格儲存介面。

在 PostgreSQL 12 中,預設使用的儲存介面是 heap 存取方法,目前這是唯一的內建方法。

頁面檢查碼

pg_verify_checkums 命令已重新命名為 pg_checksums,現在支援在離線的 PostgreSQL 叢集中啟用和停用頁面檢查碼。以前,只能在使用 initdb 初始化叢集期間啟用頁面檢查碼。

驗證 & 連線安全

GSSAPI 現在支援用戶端和伺服器端加密,並且可以使用 hostgssenchostnogssenc 記錄類型在 pg_hba.conf 檔案中指定。如果 PostgreSQL 是使用 OpenLDAP 編譯的,PostgreSQL 12 還允許根據 DNS SRV 記錄探索 LDAP 伺服器。

已記錄的行為變更

PostgreSQL 12 中引入了幾個可能會影響您的持續操作的行為和管理方式的變更。以下列出了一些,有關其他變更的資訊,請查看發布說明的「移轉至版本 12」部分。

  1. recovery.conf 組態檔案現在已合併到主 postgresql.conf 檔案中。如果 PostgreSQL 檢測到 recovery.conf 存在,則將不會啟動。若要將 PostgreSQL 置於非主要模式,您可以使用 recovery.signalstandby.signal 檔案。

您可以在此處閱讀更多關於封存恢復的資訊

https://postgres.tw/docs/12/runtime-config-wal.html#RUNTIME-CONFIG-WAL-ARCHIVE-RECOVERY

  1. 預設情況下,現在已啟用即時 (JIT) 編譯。

  2. 不再可以使用 WITH OIDs 子句將 OID 新增到使用者建立的表格。需要調整對具有使用 WITH OIDs 建立的欄位的表格(即名為「OID」的欄位)進行的操作。

現在,在系統表上執行 SELECT * 指令時,也會輸出系統表中各列的 OID,而不是像過去一樣需要明確指定 OID 欄位。

其他功能

PostgreSQL 12 中新增了許多其他功能和改進,其中一些對特定使用者來說可能比上述功能更重要。請參閱版本發布說明以獲取完整的新增和變更功能列表。

錯誤和相容性測試

每個 PostgreSQL 版本的穩定性在很大程度上取決於您,也就是社群,透過使用您的工作負載和測試工具來測試即將發布的版本,以便在 PostgreSQL 12 正式發布之前找到錯誤和迴歸問題。由於目前是 Beta 版本,因此資料庫行為、功能細節和 API 仍有可能進行細微的更改。您的回饋和測試將有助於確定新功能的最終調整,因此請盡快進行測試。使用者測試的品質有助於我們決定何時可以發布最終版本。

開放問題列表已公開在 PostgreSQL wiki 中。您可以使用 PostgreSQL 網站上的此表單回報錯誤

https://postgres.tw/account/submitbug/

Beta 時程

這是第 12 版的第一個 Beta 版本。PostgreSQL 專案將根據測試需要發布額外的 Beta 版本,然後是一個或多個候選發布版本,直到 2019 年底發布最終版本。如需更多資訊,請參閱Beta 測試頁面。

連結