PostgreSQL 12 Beta 1 版本新特性預(yù)覽
作者: 不剪發(fā)的Tony老師
畢業(yè)于北京航空航天大學(xué),十多年數(shù)據(jù)庫(kù)管理與開(kāi)發(fā)經(jīng)驗(yàn),目前在一家全球性的金融公司從事數(shù)據(jù)庫(kù)架構(gòu)設(shè)計(jì)。CSDN學(xué)院簽約講師以及GitChat專(zhuān)欄作者。csdn上的博客收藏于以下地址:https://tonydong.blog.csdn.net
文章目錄
索引相關(guān)的性能、功能和管理
內(nèi)聯(lián) WITH 查詢(xún)(通用表表達(dá)式)
分區(qū)增強(qiáng)
遵循 SQL/JSON 規(guī)范的 JSON 路徑查詢(xún)
排序規(guī)則
最頻繁值統(tǒng)計(jì)
計(jì)算列
可插拔式表存儲(chǔ)接口
頁(yè)面校驗(yàn)和
認(rèn)證與連接安全
變更注意事項(xiàng)
2019-05-23 PostgreSQL 全球開(kāi)發(fā)組發(fā)布消息稱(chēng),PostgreSQL 12 第一個(gè) beta 版提供下載測(cè)試。這個(gè)版本包含了 PostgreSQL 12 正式版中的所有特性預(yù)覽,不過(guò)某些細(xì)節(jié)可能存在變數(shù)。最終的 PostgreSQL 12 正式版將會(huì)在 2019 年下半年發(fā)布。
隨之發(fā)布的包括 PostgreSQL 12 最新特性,以下是其中一部分。
索引相關(guān)的性能、功能和管理
PostgreSQL 12 改進(jìn)了標(biāo)準(zhǔn) B-樹(shù)索引的整體性能以及索引的磁盤(pán)空間管理。這些改進(jìn)還減少了頻繁修改的B-樹(shù)索引占用的空間大小。
此外,PostgreSQL 12 新增了并發(fā)重建索引的功能,使得執(zhí)行REINDEX操作時(shí)不會(huì)阻塞索引的寫(xiě)入。這一特性可以解決生產(chǎn)環(huán)境中長(zhǎng)時(shí)間的索引重建導(dǎo)致的停機(jī)問(wèn)題。
PostgreSQL 12 擴(kuò)展了某些特殊索引的功能。PostgreSQL 11 引入了覆蓋索引,即INCLUDE子句,現(xiàn)在該功能可以支持 GiST 索引。SP-GiST 索引現(xiàn)在針對(duì)支持距離操作(<->)的數(shù)據(jù)類(lèi)型提供了K-近鄰(K-NN)查詢(xún)功能。
PostgreSQL 12 明顯減少了創(chuàng)建 GiST、GIN 或者 SP-GiST 索引產(chǎn)生的預(yù)寫(xiě)式日志(WAL),為 PostgreSQL 集群的磁盤(pán)利用率和其他特性(例如連續(xù)歸檔和流復(fù)制)帶來(lái)了諸多改進(jìn)。
內(nèi)聯(lián) WITH 查詢(xún)(通用表表達(dá)式)
通用表表達(dá)式(即WITH查詢(xún))如果滿(mǎn)足以下所有條件,將會(huì)被自動(dòng)內(nèi)聯(lián)到查詢(xún)語(yǔ)句中:
非遞歸
無(wú)副作用
只被引用一次
這一特性消除了自 PostgreSQL 8.4 引入WITH子句以來(lái)一直存在的優(yōu)化障礙(optimization fence)。
如果有需要,你還可以使用MATERIALIZED子句強(qiáng)制WITH查詢(xún)物化,例如:
WITH c AS MATERIALIZED (
SELECT * FROM a WHERE a.x % 4 = 0
)
SELECT * FROM c
JOIN d ON d.y = a.x;
分區(qū)增強(qiáng)
PostgreSQL 12 改進(jìn)了訪(fǎng)問(wèn)包含數(shù)千分區(qū)的表中少量分區(qū)時(shí)的性能。
PostgreSQL 12 還提高了分區(qū)表的INSERT和COPY操作的性能。ATTACH PARTITION現(xiàn)在不會(huì)阻塞分區(qū)表上的并發(fā)查詢(xún)。另外, PostgreSQL 12 支持引用分區(qū)表的外鍵。
遵循 SQL/JSON 規(guī)范的 JSON 路徑查詢(xún)
PostgreSQL 12 支持 SQL:2016 標(biāo)準(zhǔn)中 SQL/JSON 規(guī)定的 JSON 路徑查詢(xún)。與 XML 查詢(xún)中的 XPath 表達(dá)式類(lèi)似,JSON 路徑表達(dá)式使得查詢(xún) JSON 文檔時(shí),除了可以使用值進(jìn)行比較之外,還可以使用各種算術(shù)表達(dá)式和函數(shù)。
某些表達(dá)式可以用于提供 GIN 索引的性能,實(shí)現(xiàn)跨 JSON 數(shù)據(jù)集的高性能查找。
排序規(guī)則
PostgreSQL 12 支持 ICU 排序規(guī)則的大小寫(xiě)不敏感(case-insensitive)和重音不敏感(accent-insensitive)的比較方式,即“不確定性排序規(guī)則”。使用這些方式時(shí),可以為比較和排序操作提供便捷,但是也可能導(dǎo)致性能下降,因?yàn)樾枰獙?duì)字符串執(zhí)行額外的檢查。
最頻繁值統(tǒng)計(jì)
PostgreSQL 10 引入了 CREATE STATISTICS,用于收集多個(gè)字段上的復(fù)雜統(tǒng)計(jì)信息,以便改進(jìn)查詢(xún)計(jì)劃?,F(xiàn)在,該語(yǔ)句支持最頻繁值統(tǒng)計(jì)。這一功能改進(jìn)了非均勻分布值上的查詢(xún)計(jì)劃。
計(jì)算列
PostgreSQL 12 支持創(chuàng)建計(jì)算列(generated columns),也就是基于其他列計(jì)算出該列的值。該特性目前支持存儲(chǔ)計(jì)算列(stored generated columns),即在插入和更新時(shí)進(jìn)行計(jì)算并且將結(jié)果保存到磁盤(pán)上。不過(guò),暫時(shí)還沒(méi)有實(shí)現(xiàn)虛擬計(jì)算列(virtual generated columns),也就是在查詢(xún)執(zhí)行時(shí)直接計(jì)算出該列的值。
可插拔式表存儲(chǔ)接口
PostgreSQL 12 引入了可插拔式的表存儲(chǔ)接口,運(yùn)行創(chuàng)建和使用不同的表存儲(chǔ)方式。這一特性類(lèi)似于 MySQL 的插件式存儲(chǔ)引擎??梢酝ㄟ^(guò) CREATE ACCESS METHOD 命令添為 PostgreSQL 集群添加新的訪(fǎng)問(wèn)方法,然后在創(chuàng)建表的CREATE TABLE語(yǔ)句中使用新的USING子句為其指定訪(fǎng)問(wèn)方法。
通過(guò)創(chuàng)建一個(gè)新的表訪(fǎng)問(wèn)方法可以定義一個(gè)表存儲(chǔ)接口。
在 PostgreSQL 12 中,默認(rèn)使用的存儲(chǔ)接口為 heap 訪(fǎng)問(wèn)方法,這也是目前唯一內(nèi)置的訪(fǎng)問(wèn)方法。
頁(yè)面校驗(yàn)和
pg_verify_checkums命令被重命名為 pg_checksums,并且支持啟用和禁用離線(xiàn) PostgreSQL 集群的頁(yè)面校驗(yàn)和功能。在此之前,頁(yè)面校驗(yàn)和只能在使用 initdb 初始化集群時(shí)被啟用。
認(rèn)證與連接安全
GSSAPI 支持客戶(hù)端和服務(wù)器的加密,可以在文件 pg_hba.conf 中使用 記錄類(lèi)型 hostgssenc 和 hostnogssenc 進(jìn)行配置。如果使用了 OpenLDAP 編譯選項(xiàng),PostgreSQL 12 還支持基于 DNS SRV 記錄的 LDAP 服務(wù)器發(fā)現(xiàn)功能。
變更注意事項(xiàng)
PostgreSQL 12 引入的某些變更可能會(huì)影響現(xiàn)有系統(tǒng)的的行為。下面給出了一些這種變更;更多的信息可以參考發(fā)行說(shuō)明中的“遷移到 PostgreSQL 12”。
配置文件 recovery.conf 被合并到主配置文件 postgresql.conf 中。PostgreSQL 如果檢測(cè)到 recovery.conf,將不會(huì)啟動(dòng)。如果想要將 PostgreSQL 設(shè)置為非主模式,可以使用 recovery.signal 和 standby.signal 兩個(gè)文件。
可以通過(guò)以下鏈接查看更多關(guān)于歸檔恢復(fù)的內(nèi)容:
https://www.postgresql.org/docs/devel/runtime-config-wal.html#RUNTIME-CONFIG-WAL-ARCHIVE-RECOVERY
即時(shí)編譯(JIT)功能默認(rèn)被啟用Just-in-Time (JIT) 。
用戶(hù)使用WITH OIDs子句創(chuàng)建的表中不再添加 OID 字段。針對(duì)這些使用WITH OIDS創(chuàng)建的字段(即名為“OID”的字段)上執(zhí)行的操作需要進(jìn)行調(diào)整
針對(duì)系統(tǒng)表執(zhí)行的SELECT *命令現(xiàn)在會(huì)顯示 OID 信息,而不需要像之前一樣明確指定該字段的名稱(chēng)。
除此之外,PostgreSQL 12 還提供了許多重要的新特性和增強(qiáng)功能,完整的新特性列表可以參考 PostgreSQL 12 發(fā)行說(shuō)明。