目前非常流行的RDBMS PostgresSQL已經在幾周前發布了它的第10個版本。由于Postgres的可靠性、節約成本、成熟,當然還有它的開源,已經21歲的Postgres在開發者之中仍舊非常流行。
Postgres 10帶來了一些新特性,其中一些特性另開發者感到十分興奮。10Clouds在博客中詳細介紹了其中的一些特性。通過消除主表(master table)中觸發器(trigger)的需求,本地分區(native partitioning)現在變得更簡單了。這意味著創建分區表將變得更簡單,并且從開發者的角度來看,現在從分區數據表中進行查詢和插入與在非分區的數據表進行這些操作是完全一致的。
多列統計(multicolumn statistics)是Postgres 10的另一項改進。通過把來自不同列的數據關聯起來,查詢規劃器(query planner)現在可以避免一些邊緣情況,在那些邊緣情況下,之前的Postgres版本會認為WHERE語句更強的選擇性,并且會導致選擇了錯誤計劃從而拖慢執行時間。Postgres的這個改進在整個SQL世界中都是極具創新性的。
Postgres 10還對并行性進行了改進。開發者現在可以使用索引掃描(index scans)和僅索引掃描(index-only scans)、并行合并連接(merge joint)以及位圖堆掃描。并行查詢是通過不同的workers來實現的,因此在某些情況下,設置和分解的成本會超過并行化的好處。默認情況下,可以在大于8MB大小的表以及大于512KB的索引上啟用并行表掃描(parallel table scan),但是這些選項可以根據需要進行配置。
Postgres 10另一個重要的新特性是支持JSON和JSONB類型列的全文搜索。一旦我們創建了一個特定語言的全文索引,我們就可以通過JSON字段對值進行直接搜索。在JSON列上的全文索引與其他列是類似的,因此我們的查詢需要使用to_tsquery函數和to_tsvector函數的文本搜索的語法。
標識列(Identity columns)和自增列(Auto-increment columns)也是Postgres 10進行改進的一個地方。新的實現方法會有一點冗長,但是它是符合SQL標準的,使得在不同數據庫之間的遷移會更加容易。最重要的是,使用Postgres 10時,我們在從一個不同的id重啟時,不再需要修改序列(alter sequences)了,但是我們可以對這一列進行修改(alter),Postgres就會將這一列識別為一個序列,這樣操作會簡化我們數據庫中的日常操作。
正如我們預料到的那樣,Postgres 10存在一些不向后兼容的改動。對浮點時間戳的支持已經被拋棄了,對于低于版本8的 pg_dump也已經不再提供支持,有關復制(replication)和pg_basebackup工具的一些默認值也有所變化。版本編號由三部分改為了兩部分,同時開發者的腳本不能直接運行,而是使用類似于server_version_num這種查詢,它返回的是一致的的可排序的和可比較的(sortable and comparable)版本號。
查看英文原文:Postgres 10 Features for Developers