PostgreSQL 全球開發團隊宣布 PostgreSQL 12 的第一個 Beta 版本現已可供下載。此版本包含 PostgreSQL 12 最終版本中將提供的所有功能的預覽,但發布的一些細節可能會在此之前發生變化。
秉持開放原始碼 PostgreSQL 社群的精神,我們強烈建議您在資料庫系統中測試 PostgreSQL 12 的新功能,以幫助我們消除可能存在的任何錯誤或其他問題。雖然我們不建議您在生產環境中執行 PostgreSQL 12 Beta 1,但我們鼓勵您尋找方法針對此 Beta 版本執行典型的應用程式工作負載。
您的測試和回饋將有助於社群確保 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
查詢)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 還提高了 INSERT
和 COPY
到分割區表中的效能。現在可以在不封鎖分割區表上的並行查詢的情況下執行 ATTACH PARTITION
。此外,PostgreSQL 12 現在允許使用外鍵來引用分割區表。
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 現在支援用戶端和伺服器端加密,並且可以使用 hostgssenc
和 hostnogssenc
記錄類型在 pg_hba.conf
檔案中指定。如果 PostgreSQL 是使用 OpenLDAP 編譯的,PostgreSQL 12 還允許根據 DNS SRV
記錄探索 LDAP 伺服器。
PostgreSQL 12 中引入了幾個可能會影響您的持續操作的行為和管理方式的變更。以下列出了一些,有關其他變更的資訊,請查看發布說明的「移轉至版本 12」部分。
recovery.conf
組態檔案現在已合併到主 postgresql.conf
檔案中。如果 PostgreSQL 檢測到 recovery.conf
存在,則將不會啟動。若要將 PostgreSQL 置於非主要模式,您可以使用 recovery.signal
和 standby.signal
檔案。您可以在此處閱讀更多關於封存恢復的資訊
https://postgres.tw/docs/12/runtime-config-wal.html#RUNTIME-CONFIG-WAL-ARCHIVE-RECOVERY
預設情況下,現在已啟用即時 (JIT) 編譯。
不再可以使用 WITH OIDs
子句將 OID 新增到使用者建立的表格。需要調整對具有使用 WITH OIDs
建立的欄位的表格(即名為「OID」的欄位)進行的操作。
現在,在系統表上執行 SELECT *
指令時,也會輸出系統表中各列的 OID,而不是像過去一樣需要明確指定 OID 欄位。
PostgreSQL 12 中新增了許多其他功能和改進,其中一些對特定使用者來說可能比上述功能更重要。請參閱版本發布說明以獲取完整的新增和變更功能列表。
每個 PostgreSQL 版本的穩定性在很大程度上取決於您,也就是社群,透過使用您的工作負載和測試工具來測試即將發布的版本,以便在 PostgreSQL 12 正式發布之前找到錯誤和迴歸問題。由於目前是 Beta 版本,因此資料庫行為、功能細節和 API 仍有可能進行細微的更改。您的回饋和測試將有助於確定新功能的最終調整,因此請盡快進行測試。使用者測試的品質有助於我們決定何時可以發布最終版本。
開放問題列表已公開在 PostgreSQL wiki 中。您可以使用 PostgreSQL 網站上的此表單回報錯誤。
https://postgres.tw/account/submitbug/
這是第 12 版的第一個 Beta 版本。PostgreSQL 專案將根據測試需要發布額外的 Beta 版本,然後是一個或多個候選發布版本,直到 2019 年底發布最終版本。如需更多資訊,請參閱Beta 測試頁面。