最穩定可靠,PostgreSQL 12.1版本正式釋出!

資料和雲發表於2019-05-31

1. PG 12.1 Beta釋出了!


PostgreSQL全球開發組宣佈,PostgreSQL 12的第一個測試版(PG 12.1 Beta)現已開放下載。該版本中可預覽的所有特性都將延續至PG 12的最終版本中,不過在最終版本釋出之前,一些細節仍可能發生變動。

本著PG社群的開源精神,我們強烈呼籲大家在自己的資料庫系統中測試PG 12的新特性,從而幫助我們更多地消除可能存在的任何bug以及問題。當然,我們並不是建議您在自己的生產環境中應用PG 12.1 Beta,而是希望您尋找一種可以利用您現有的經典應用對該版本進行測試的一種方法。

PG 12秉承了我們的一直以來為世界最先進的開源關係型資料庫提供穩定可靠版本的標準。因此為了幫助我們確保這一點,我們非常需要您積極的測試及反饋。


2. PG 12特性概覽


2.1 索引的效能、功能性以及管理

PG 12通過改善索引的空間管理,進而提升了標準B樹索引的總體效能。除了效能上的提升,這些改進也提供了對頻繁修改的索引所佔用空間的縮減。

此外,PG 12增加了線上重建索引的功能,該功能可以讓您的REINDEX操作不再阻塞任何對索引的寫入。當您在生產環境中管理PG資料庫時,該功能可以有效解決由於漫長地重建索引而導致的迫不得已的業務中斷。

PG 12對一些特定的索引機制的功能進行了擴充套件。例如在PG 11中引入的用於建立覆蓋索引(covering index)的include子句,在PG 12中將同樣適用於建立GiST索引。SP-GiST索引現在支援對支援距離(<->)操作的資料型別使用k近鄰法(K-nearest neighbor K-NN)查詢。

在PG 12中,建立一個GiST、GIN或是 SP-GiST索引所產生的日誌先行(write-ahead log --WAL)的消耗將大大減少。這也為PG叢集對磁碟的利用,以及一些像連續歸檔(continuous archiving)、流複製(streaming replication)這樣的功能,提供了諸多益處。

2.2 內嵌WITH查詢(Common table expressions)

公用表表示式(Common table expressions),亦被稱為WITH查詢,現在可以自動內嵌到一個查詢語句中。但這些WITH查詢須符合如下條件:

  • 不是遞迴的

  • 沒有任何副作用

  • 在整條sql語句的後續部分中只會被引用一次

這將移除從PG 8.4引入WITH子句時就已存在的"optimization fence"。

如果有需要,可以使用MATERIALIZED子句來強制使一個WITH查詢物化。如下:

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

2.3 分割槽

對擁有上千個分割槽的表中檢索一小部分分割槽的操作的處理,PG 12進行了效能上的優化。

PG 12也對分割槽表進行INSERT以及COPY操作時的效能進行了改善。PG 12中執行ATTACH PARTITION操作將不再阻塞對分割槽表併發查詢。此外,PG 12中將允許建立關聯到分割槽表的外來鍵。

2.4 JSON path queries per SQL/JSON specification

PG12現在支援SQL:2016標準中的每一個SQL/JSON規範的JSON path查詢。就像查詢XML使用的Xpath一樣,JSON path表示式可以讓您除了對json文件中的值進行比較以外,還可以讓您計算多種多樣的算術表示式和函式。

這些表示式中的一部分還可以使用GIN索引來提高計算效率,從而高效的對JSON資料集進行檢索。

2.5 校對

PG 12現在支援對ICU提供的排序規則進行不區分大小寫(case-insensitive)、不區分口音(accent-insensitive)的比較,亦被稱為非確定性校對(nondeterministic collations)。

當該特性被使用時,這些collation可以為排序和比較提供便利,但同時可能會因為對字串額外的檢查,而導致額外的效能損失。

2.6 Most-common Value Extended Statistics

在PG 10中引入的CREATE STATISTICS,是為了在多列上收集更復雜的統計資訊,從而幫助產生更準確的執行計劃。在PG 12中,收集統計資訊支援most-common value statistics。這將進一步提升當資料分佈不均勻時產生的執行計劃的準群性。

2.7 被生成的列(Generated Columns)

PG 12允許建立生成列(就是Oracle的虛擬列)。這是一種列值是由其他列的值計算得出的列。該特性允許建立可儲存的(stored)生成列,即在insert或update時計算出生成列的列值並儲存於物理磁碟上。虛擬的(Virtual)生成列,是隻有在其作為查詢的一部分時才生成,目前該功能尚未實現。

注:生成列分為倆種stored和virtual,stored型別是寫入是計算的得到,而virtual型別是隻有讀時才計算。

2.8 可插拔的表儲存介面(Pluggable Table Storage Interface)

PG 12引入可插拔表儲存介面(pluggable table storage interface),允許建立和使用不同的表儲存方法。新的訪問方法可以通過使用CREATE ACCESS METHOD的指令被新增到PG叢集中,並且隨後可以使用CREATE TABLE的新子句—USING,將新的訪問方法新增的具體的表中。

一個表儲存介面可以通過建立一個新的表訪問方法來定義。

在PG 12中預設使用的儲存介面是堆訪問方法(heap access method),該方法是目前唯一的內建方法。

2.9 塊校驗和(Page Checksums)

pg_verify_checkums這條指令現在更名為pg_checksums,並且可以在一個離線的PG叢集中進行啟用和禁用。在之前的版本,該功能只能在使用initdb對叢集初始化時啟用。

2.10 身份認證以及連線安全(Authentication & Connection Security)

GSSAPI現在支援客戶端和伺服器端加密,該功能可以在pg_hba.conf 中使用hostgssenc和hostnogssenc這倆中記錄型別進行指定。

如果PG 12是使用OpenLDAP進行編譯的,那麼PG 12還可以發現基於DNS SRV記錄的LDAP servers。


3. 行為變更注意事項


PG 12中引入一些改變,這將對您慣用的管理時進行的操作和行為有一定影響。下面會列舉這些變化中的一小部分,更多的其他改變的相關資訊,可以從Release Notes的"Migrating to Version 12"部分中獲取(https://www.postgresql.org/docs/devel/release-12.html)

1. recovery.conf這個引數檔案現在已經合併到postgresql.conf檔案中了。如果PG檢測到有recovery.conf的存在,PG將不會成功啟動。如果想讓PG處於非主(non-primary)模式,您可以使用recovery.signal和standby.signal這兩個檔案。

您可以通過下面的連線獲得更多的歸檔恢復(archive recovery)的資訊:https://www.postgresql.org/docs/devel/runtime-config-wal.html#RUNTIME-CONFIG-WAL-ARCHIVE-RECOVERY

1. Just-in-Time (JIT)編譯現在時預設開啟的。

2. PG 12將不再允許使用WITH OIDs子句將OIDs新增到使用者建立的表中。對於已經存在的使用WITH OIDs子句建立的表(例如列名是OID)的操作需要及時進行調整。

3. PG12中查詢系統表時執行select *的指令,也會輸出系統表的行的OID,而不再需要像之前的版本進行顯示的指定OID列。


4. 其他特性


許多其他的新特性和改進已經被新增到PG 12中,其中一些特性和改變對於特定的使用者來說,可能比上面提到的特性還重要。所以完整的新特性和新改進的請您檢視Release Notes:https://www.postgresql.org/docs/devel/release-12.html。


5. BUG和相容性的測試


每一個PG版本的穩定性,都非常依賴於您和您的團隊使用您們的工作負載和測試工具對即將到來的版本進行不斷的測試,從而幫助我們在PG 12公共版本釋出之前找出更多的BUG和功能退步的地方。

由於這是一個測試版本,所以可能存在對於資料庫行為、一些特性的細節以及各種介面(APIs)的一些細小的改變。您的反饋和測試將幫助我們最終確定該對新特性進行怎樣的微調,所以懇請您儘快將其投入測試。使用者測試的質量將幫助我們確定最終版本該合適釋出。

一系列開放性問題已在PostgreSQL wiki對您公開。您可以使用如下的格式將bug在PG官網上告知我們:https://www.postgresql.org/account/submitbug/


6. 測試版本釋出計劃


這是PG 12的第一個測試版本,2019年年底釋出最終版本之前,我們PG專案組將陸續根據測試需求釋出更多的測試版本。

更進一步的詳情請到如下網址瞭解:https://www.postgresql.org/developer/beta/


7. 相關連結


下載:https://www.postgresql.org/download/

測試版本資訊:https://www.postgresql.org/developer/beta/

PG 12 Beta版本說明:https://www.postgresql.org/docs/devel/release-12.html

PG 12開放問題彙總:https://wiki.postgresql.org/wiki/PostgreSQL_12_Open_Items

提交BUG:https://www.postgresql.org/account/login/?next=/account/submitbug/

若翻譯中出現一些技術上的錯誤,歡迎的大家在評論區指正,期待與您的互動!

最穩定可靠,PostgreSQL 12.1版本正式釋出!

燕鑫

雲和恩墨交付工程師

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31556440/viewspace-2646390/,如需轉載,請註明出處,否則將追究法律責任。

相關文章