發(fā)布時間: 2025年04月22日 15:41
PostgreSQL 12 已經(jīng)發(fā)布,該版本在各方面都得到了加強(qiáng),包括顯著地提升查詢性能,特別是對大數(shù)據(jù)集,總的空間利用率方面。這個版本為應(yīng)用程序開發(fā)人員提供了更多的功能,比如對 SQL/JSON 路徑表達(dá)式的支持,優(yōu)化公共表達(dá)式(WITH查詢)的執(zhí)行,以及對生成列的支持等。
?
PostgreSQL 除了持續(xù)對 PostgreSQL 系統(tǒng)的可擴(kuò)展性、穩(wěn)健性進(jìn)行開發(fā)外,還更多地在本地化、授權(quán)控制以及更加容易的管理進(jìn)行增強(qiáng)。這個版本也引入了 可插撥的表存取接口,來允許開發(fā)者在表的創(chuàng)建和使用時使用不同的存取方式。具體如下:
全面的性能提升
PostgreSQL 12版本在性能和易維護(hù)性方面有了顯著的增強(qiáng),尤其是對索引和分區(qū)子系統(tǒng)。
PostgreSQL 12 對標(biāo)準(zhǔn)索引類型B樹索引進(jìn)行了優(yōu)化,以使其可以可以更好地處理索引更新頻率較高類型的負(fù)載的的總體性能,使用最常使用的TPC-C 性能測試,PostgreSQL 12 平均可以提升約 40% 的空間利用率和查詢性能。
對分區(qū)表的查詢也得到了較大改進(jìn),特別是對那些有數(shù)千個分區(qū)的表,而結(jié)果只需從幾個有限的分區(qū)提取數(shù)據(jù)的查詢。PostgreSQL 12 對通過 INSERT 和COPY指令將數(shù)據(jù)加入分區(qū)表的操作,也有加強(qiáng),包括現(xiàn)在可以在不阻塞查詢的情況下增加新的分區(qū)。
另外,PostgreSQL 12 對索引的優(yōu)化也提升了總體的性能,包括生成 GiST、GIN 或 SP-GiST 索引的 WAL 日志的負(fù)載顯著減少,在 GiST 類型索引上創(chuàng) 建INCLUDE選項的包含索引,SP-GiST 索引現(xiàn)在支持距離操作的 K-NN(即相鄰最近)查詢,以及CREATE STATISTICS指令現(xiàn)在支持最常用值 MCV 的統(tǒng)計來幫助那些字段值非均勻分布的查詢生成更優(yōu)化的查詢計劃。
通過使用 LLVM,從 PostgreSQL 11 版引入的 JIT 即時編譯,在 PostgreSQL 12 中缺省已是啟用狀態(tài),JIT 即時編譯對帶有 WHERe 條件、對象列表、 聚合以及一些內(nèi)部操作都會提供性能上的幫助。當(dāng)然,用戶在安裝或是編譯時需要包含 LLVM 模塊。
對 SQL 標(biāo)準(zhǔn)一致性和功能的增強(qiáng)
PostgreSQL 一直以來以其對 SQL 標(biāo)準(zhǔn)符合性而著稱,這也是其名稱由 POSTGRES 改為 PostgreSQL 的一個小原因。PostgreSQL 12 又增加了幾個新特性 來持續(xù)實現(xiàn)對 SQL 標(biāo)準(zhǔn)的符合性的強(qiáng)化。
PostgreSQL 12 加入了對 JSON 文檔進(jìn)行查詢時使用 JSON 路徑表達(dá)式的功能,這也是 SQL/JSON 中定義的規(guī)范。對使用 JSONB 格式保存的文檔,這些查 詢可以利用已有的索引機(jī)制來高效地提取數(shù)據(jù)。
公共表達(dá)式,也稱之為 WITH 查詢,在 PostgreSQL 12 中可以實現(xiàn)非物化操作處理,這對很多現(xiàn)在已有的查詢有很大幫助。目前在這個版本中,WITH 查詢的前提條件是非遞歸查詢并且僅可被外層查詢引用一次。
PostgreSQL 12 也引入了“生成列”功能,這也是 SQL 標(biāo)準(zhǔn)中的要求,這些字段值是通過同一表中其它列計算而來的。在這一版本中,PostgreSQL 支持“保存生成列值”的功能,即將這些計算出來的數(shù)據(jù)存儲在磁盤上。
本地化
PostgreSQL 12 擴(kuò)充了對 ICU 排序規(guī)則的支持,允許用戶自行定義非標(biāo)準(zhǔn)的排序方式,比如允許大小寫不敏感或是按口音不敏感的比較規(guī)則。
授權(quán)控制
PostgreSQL 通過再次擴(kuò)展了一些的安全方面的功能來強(qiáng)化了它本來就很穩(wěn)健的權(quán)限控制。這個版本中通過 GSSAPI 接口支持客戶端和服務(wù)端的雙向加密, 如果在編譯時加入 OpenLDAP 模塊,PostgreSQL 也支持搜索 LDAP 服務(wù)器的功能。
另外,PostgreSQL 12 現(xiàn)在支持多約束的授權(quán)方式。如在使用scram-sha-256的授權(quán)方式,PostgreSQL 服務(wù)器現(xiàn)在可以強(qiáng)制一個客戶端在提供用戶名、使用clientcert=verify-full選項,再必須提供有效的 SSL 證書的方式來強(qiáng)化安全授權(quán)。
系統(tǒng)管理
PostgreSQL 12 的REINDEX CONCURRENTLY指令可以在不影響新的索引寫入的前提下讓用戶執(zhí)行重那建索引操作,這有助于用戶實現(xiàn)不停機(jī)對 較大索引的重建。
還有,PostgreSQL 12 通過使用pg_checksums指令對停機(jī)的 PostgreSQL 來開啟或關(guān)閉頁校驗功能,該功能有助于檢查已寫入磁盤的數(shù)據(jù)一致性, 而以前版本中該操作僅允許在 initdb的階段來執(zhí)行。