PostgreSQL12、13新特性

2020-08-13 14:36:20

PostgreSQL13新特性:

PostgreSQL 全球開發組於 2020-05-21 宣佈了 PostgreSQL 13 的第一個 beta 版本,目前已經提供了下載。雖然細節可能會有所改變,但是該版本包含了 PostgreSQL 13 最終正式版中的所有新特性的預覽,讓我們趕緊一睹爲快吧!

功能性

PostgreSQL 13 增加了許多改進效能的新特性,同時使得應用程式的開發更加容易。

  • 改進了 B 樹索引中重複數據的處理,減少了索引的大小並且提高了查詢速度,尤其是當索引中包含重複值的時候。
  • 增加了增量排序功能,可以加速基於已經排序的中間結果集的排序操作。
  • 包含 OR 子句或者 IN/ANY 常數列表的查詢可以利用擴充套件統計(通過 CREATE STATISTICS 語句建立)可以獲得更好的執行計劃和效能。
  • 可以使用磁碟實現大型數據集的雜湊聚合(作爲聚合查詢的一部分)。
  • 分割區功能的持續改進,包括更多場景下的分割區表直接連線查詢,從而提高總體的查詢效能。
  • 分割區表支援 BEFORE 行級觸發器,並且支援分割區表的整體邏輯複製,不需要單獨發佈和訂閱每個分割區。
  • 實現了更多的 SQL 查詢功能,例如 FETCH FIRST WITH TIES,可以返回更多滿足條件的數據。
  • 爲 jsonpath 查詢增加了 .datetime() 函數,自動將日期或者時間字串轉換爲合適的 PostgreSQL 日期/時間數據型別。
  • 更加方便的隨機 UUID,內建函數 gen_random_uuid() 不再需要安裝額外的擴充套件外掛。

管理性

  • VACUUM 命令支援索引的並行處理,這也是 PostgreSQL 13 最令人期待的特性之一。通過 VACUUM 命令的新選項 PARALLEL 或者 vacuumdb --parallel 可以指定清理索引時的併發工作進程。注意,該選項不相容 FULL 選項。
  • reindexdb 命令增加了 --jobs 選項,用於指定重新索引時的併發執行緒數量。
  • 引入了「可信外掛」的概念,允許 superuser 指定某個外掛可以被使用者安裝到自己的數據庫中,只要他們擁有 CREATE 許可權即可;
  • 支援更多的數據庫監控方式:允許追蹤 WAL 使用統計、流複製基礎備份的進度以及 ANALYZE 命令的執行進度。pg_basebackup 可以生成一個描述清單,用於驗證備份的完整性(通過一個新的工具 pg_verifybackup)。允許限製爲複製槽(replication slots)保留的 WAL 空間。
  • pg_dump 支援新的選項,--include-foreign-data,用於導出 FDW 外部伺服器中的數據。
  • pg_rewind 命令的增強。除了自動故障恢復之外,pg_rewind 也可以通過 --write-recovery-conf 選項設定 PostgreSQL 備用範例。另外,pg_rewind 還可以使用目標範例的 restore_command 獲取所需的預寫日誌。

安全性

PostgreSQL 繼續改進了安全相關的功能,引入了 PostgreSQL 安全部署相關的特性:

  • psql 和許多 PostgreSQL 連線驅動所使用的 libpq 連線庫引入了幾個新的安全參數。增加了 channel_binding 連線參數,允許用戶端使用 SCRAM 的通道系結功能。另外,用戶端還可以使用 sslpassword 參數指定密碼,通過密碼保護的 TLS 進行認證。PostgreSQL 13 還增加了 DER 加密認證。
  • PostgreSQL 外部數據封裝器(postgres_fdw)增強了安全連線功能,包括使用基於認證的授權連線到其他 PostgreSQL 伺服器。另外, 非特權使用者可以通過 postgres_fdw 不提供密碼連線到其他 PostgreSQL 數據庫。

其他增強

  • PostgreSQL 13 改進了 Windows 系統上的操作系,執行 PostgreSQL 的 Window 使用者可以使用 UNIX 域通訊端進行連線。
  • PostgreSQL 13 文件增加了術語彙編(glossary),可以幫助使用者熟悉 PostgreSQL 和通用的數據庫概念。與此同時,表格中的函數和運算子展示也進行了重大的重新編排,改進了網頁和 PDF 文件的可讀性。
  • 用於效能測試的 pgbench 工具可以支援 accounts 表的分割區,使得包含分割區表的效能測試更加簡單。
  • psql 支援 \warn 命令,功能類似於輸出數據的 \echo 命令,區別在於 \warn 的結果列印到 stderr。另外,--help 選項包含了一個指向 https://www.postgresql.org 的鏈接

 

PostgreSQL12 新特性:

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/

轉自:

http://blog.itpub.net/31556440/viewspace-2646390/

https://blog.csdn.net/horses/article/details/106251459