PostgreSQL 每週新聞 - 2021 年 5 月 23 日

發布於 2021-05-24 作者:PWN
PWN

PostgreSQL 每週新聞 - 2021 年 5 月 23 日

PostgreSQL 14 Beta 1 已發布。測試!

官方 IRC 頻道已從 Freenode 遷移到 Libera。詳情請見此處

PostgreSQL 產品新聞

DBD::Pg 3.15.0,一個用於 PostgreSQL 的 Perl 驅動程式,已發布

pg_back 2.0.1,是一個可以將 PostgreSQL 資料庫轉儲到檔案的工具,已發布

五月份的 PostgreSQL 工作

https://archives.postgresql.org/pgsql-jobs/2021-05/

PostgreSQL 新聞報導

Planet PostgreSQL: https://planet.postgresql.org/

本週的 PostgreSQL 每週新聞由 David Fetter 帶來

請在太平洋標準時間 (PST8PDT) 星期日下午 3:00 前將新聞和公告提交至 david@fetter.org。

已套用的修補程式

Bruce Momjian 推送

Etsuro Fujita 推送

Magnus Hagander 推送

Peter Eisentraut 推送

Tom Lane 推送

  • 標記 14beta1。https://git.postgresql.org/pg/commitdiff/e4f9737fac77a5cb03a84d1f4038d300ffd28afd

  • 避免在不需要的地方建立 testtablespace 目錄。最近我們重構了一些東西,以便 pg_regress 建立核心迴歸測試使用的 "testtablespace" 子目錄,而不是在 makefiles 中執行此操作。這產生了一個不良的副作用,即在每個具有 "input" 或 "output" 測試檔案的目錄中建立這樣一個子目錄。由於這些子目錄保持為空,git 不會抱怨它們,但儘管如此,它們還是很混亂。為了修復這個問題,我們發明了一個明確的 --make-testtablespace-dir 開關,以便 pg_regress 僅在明確告知的情況下才建立子目錄。討論:https://postgr.es/m/2854388.1621284789@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/413c1ef98e0c9c708c4a9a13a838a55b65b16a80

  • 清除 cpluspluscheck 違規。"typename" 是一個 C++ 關鍵字,因此 pg_upgrade.h 無法在 C++ 中編譯。幸運的是,似乎沒有理由需要有人這樣做。儘管如此,專案政策是所有 .h 檔案都應該通過 cpluspluscheck,因此重新命名參數以修復這個問題。57c081de0 中的疏忽;回溯修補,因為那是。 (要求 pg_upgrade.h 通過 cpluspluscheck 的政策僅追溯到 v12,但似乎最好保持此程式碼在所有分支中看起來相同。)https://git.postgresql.org/pg/commitdiff/6d59a218c38adf5b993200a804713df4982a0c75

  • 避免在 plpgsql FOR 迴圈內的 COMMIT 後發生 detoast 失敗。 exec_for_query() 通常會嘗試一次從正在迭代的查詢中預先提取幾列,以減少執行器進入/退出的開銷。不幸的是,如果迴圈內有 COMMIT 或 ROLLBACK,這是非安全的,因為我們預先提取但尚未檢查的資料中可能存在 TOAST 引用。在 COMMIT/ROLLBACK 之後,session 中沒有快照,這意味著 VACUUM 可以自由地移除最近刪除的 TOAST 列。這最初被報告為在 init_toast_snapshot() 中觸發“no known snapshots”錯誤的案例,但即使您錯過了觸發該錯誤,您也可能遇到“missing toast chunk”,如新增的隔離測試案例所示。為了修正這個問題,只需在非原子上下文中禁用預先提取。也許會有性能方面的投訴促使我們稍後更加努力地解決這個問題,但目前尚不清楚這是否真的會帶來很大的成本,而且我懷疑我們會想要反向移植任何複雜的修復。順便說一句,調整 init_toast_snapshot() 中的錯誤訊息,使其更清楚地說明問題的可能原因。由我修補,基於 Konstantin Knizhnik 先前的調查。根據 Andreas Wicht 提出的 bug #15990。反向移植到 v11,其中新增了程序內 COMMIT。討論:https://postgr.es/m/15990-eee2ac466b11293d@postgresql.org https://git.postgresql.org/pg/commitdiff/f21fadafaf0fb5ea4c9622d915972651273d62ce

  • 在程序 COMMIT/ROLLBACK 後恢復 portal 層級的快照。 COMMIT/ROLLBACK 必然會銷毀 session 內的所有快照。程序內交易的原始實作只是輕率地這樣做了,忽略了一個事實,即這使我們在與正常情況相當不同的環境中執行。特別是,事實證明, toasted datums 的處理在很大程度上取決於是否存在外部 ActiveSnapshot:否則,當 SPI 或核心執行器彈出它們使用的任何快照並返回時,取消引用查詢結果中可能出現的任何 toasted datums 是不安全的。由於這個疏忽,有可能演示“no known snapshots”和“missing chunk number N for toast value”錯誤。從歷史上看,這個外部快照一直由 Portal 程式碼持有,而且這似乎是一個值得保留的好計畫。因此,在 pquery.c 中新增基礎設施,以便在 Portal 擁有的快照不再存在時重新建立它,並新增足夠的簿記支援,以便我們可以判斷它是否存在。但是,我們不能僅僅將 Portal 快照重新建立為 COMMIT/ROLLBACK 的一部分。與正常的交易開始一樣,獲取第一個快照應等到 SET 和 LOCK 命令之後。因此,教導 spi.c 在正確的時間執行此操作。(請注意,此修補程式無法修復任何嘗試在不使用 SPI 執行 SQL 命令的情況下運行程序內交易的 PL 的問題。)這使得 SPI 的 no_snapshots 參數相當於一個誤稱,因此在 HEAD 中,將其重新命名為 allow_nonatomic。 replication/logical/worker.c 也需要一些修復,因為它在執行 AFTER 觸發器時沒有小心地保持快照打開。該程式碼未使用 Portal,我懷疑有一天我們必須修復它。但是現在,只需重新排列操作順序即可。這包括將最近新增的 finish_estate() 反向移植到 v13,以集中化那裡的清除邏輯。這也會將 commit 2ecfeda3e 反向移植到 v13,以提高 worker.c 的測試覆蓋率(正是該測試暴露了 worker.c 的快照管理是錯誤的)。根據 Andreas Wicht 提出的 bug #15990。反向移植到 v11,其中新增了程序內 COMMIT。討論:https://postgr.es/m/15990-eee2ac466b11293d@postgresql.org https://git.postgresql.org/pg/commitdiff/84f5c2908dad81e8622b0406beea580e40bb03ac

  • 修復 GENERATED 運算式中 "tableoid" 的用法。我們認為這是受支援的(儘管我懷疑這是不是一個好主意,因為 tableoid 不是 immutable)。但是,幾個程式碼路徑未能及時填入該欄位,導致此類 GENERATED 運算式看到零或錯誤的值。當 ALTER TABLE 向具有現有列的表新增新的 GENERATED 欄位時,以及在具有 GENERATED 欄位的外來表上進行常規 INSERT 或 UPDATE 期間,會發生這種情況。在調查 Vitaly Ustinov 的報告時注意到。反向移植到 v12,其中引入了 GENERATED。討論:https://postgr.es/m/CAM_DEiWR2DPT6U4xb-Ehigozzd3n3G37ZB1+867zbsEVtYoJww@mail.gmail.com https://git.postgresql.org/pg/commitdiff/2b0ee126bbf01cbfd657bd53c94f9284ba903ca2

  • 不允許在 GENERATED 運算式中使用整行變數。以前允許這樣做,但我認為這只是一個疏忽。這明顯違反了生成的欄位不能依賴自身或其他生成的欄位的規則。此外,由於程式碼依賴於不存在此類交叉引用的假設,因此很容易導致 ALTER TABLE 崩潰,也可能導致其他地方崩潰。即使您設法沒有崩潰,您也會得到相當不穩定、依賴於實作的結果。根據 Vitaly Ustinov 的報告。反向移植到 v12,其中引入了 GENERATED。討論:https://postgr.es/m/CAM_DEiWR2DPT6U4xb-Ehigozzd3n3G37ZB1+867zbsEVtYoJww@mail.gmail.com https://git.postgresql.org/pg/commitdiff/4b10074453d182b5fc11a5667bab2ef8532ff3a6

  • 移除 plpgsql 針對 SET/RESET 的特殊情況程式碼路徑。在 84f5c2908 之後,plpgsql 不再需要特別處理 SET/RESET。這樣做的目的只是為了避免過早地取得新的交易快照,而透過 _SPI_execute_plan() 的常規程式碼路徑現在可以很好地做到這一點(事實上更好,因為它現在也為 LOCK 做正確的事情)。因此,刪除幾行程式碼,回到將 SET/RESET 視為一般 SQL 命令的舊方法。這實質上恢復了 b981275b6 中除了測試案例之外的所有內容。討論:https://postgr.es/m/15990-eee2ac466b11293d@postgresql.org https://git.postgresql.org/pg/commitdiff/30168be8f75b95183abccf48f0da7a64a0cfbd9f

  • 修復在邏輯複寫 worker 中存取不再開啟的 relcache 條目。如果我們將複寫的 tuple 操作重新導向到分割區子表,然後嘗試為該事件觸發 AFTER 觸發器,則子表的關聯快取條目已關閉。只要該條目仍然存在且仍然有效,就不會產生明顯的不良影響,但運氣不好的快取刷新可能會導致崩潰或其他錯誤行為。為了修正這個問題,請延遲 ExecCleanupTupleRouting 呼叫(這是關閉子表的原因)直到我們觸發觸發器之後。這需要一些重構,以便清除函數可以存取必要的狀態。在 HEAD 中,我利用這個機會基於對新的 ApplyExecutionData 結構的使用,簡化了 worker.c 的一些函數 API。但是,至少在沒有大量分析與 a04daa97a 的可能交互的情況下,反向移植該方面似乎不安全/不切實際。順便說一句,在 afterTriggerInvokeEvents 中新增一個 Assert 來捕獲此類案例。這似乎是值得的,因為我們已經發展了許多相當非結構化的呼叫 AfterTriggerEndQuery 的方式。反向移植到 v13,其中 worker.c 具有處理分割區目標表的能力。討論:https://postgr.es/m/3382681.1621381328@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/b39630fd41f25b414d0ea9b30804f4105f2a0aff

  • 在 postmaster 意外終止時,提供更詳細的資訊。當 postmaster 因為啟動過程中的失敗而停止時,發出 LOG 訊息。如果在 PM_STARTUP 階段因為這個原因退出,已經有類似的訊息,所以如果啟動過程稍後失敗卻沒有訊息,這似乎不一致。另外,當因為 restart_after_crash 被禁用而導致 postmaster 在崩潰後停止時,也發出 LOG 訊息。這在 DBA (或開發人員) 忘記已設定該選項時,可能會有幫助。此外,這也是 postmaster 在沒有任何原因說明的情況下異常退出的唯一剩餘位置。順便一提,移除了一個無法到達的 ExitPostmaster(0) 呼叫。討論:https://postgr.es/m/194914.1621641288@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/bc2a389efb3b52d259cefd53c16cfa00742116f2

  • 重新排序 pg_attribute 欄位以消除一些填充空間。既然 attcompression 只是一個 char,它之後有很多浪費的填充空間。將它移動到 char 寬度的欄位群組中,以節省每個 pg_attribute 條目 4 個位元組。同時,交換 attstorage 和 attalign 的順序,以更符合邏輯地將這些欄位分組。此外,重新排序相關程式碼中的動作以符合新的欄位順序。此修補程式還修正了一個直接的錯誤:equalTupleDescs() 無法比較 attcompression。例如,這可能導致 relcache 重新載入在變更後無法採用新值。Michael Paquier 和 Tom Lane,根據 Andres Freund 的抱怨。討論:https://postgr.es/m/20210517204803.iyk5wwvwgtjcmc5w@alap3.anarazel.de https://git.postgresql.org/pg/commitdiff/f5024d8d7b04de2f5f4742ab433cc38160354861

David Rowley 推送

  • 修正 README.barrier 中的拼寫錯誤和過時資訊。添加 atomics 後,README.barrier 似乎沒有收到通知。修正這個問題。作者:Tatsuo Ishii, David Rowley 討論:https://postgr.es/m/20210516.211133.2159010194908437625.t-ishii%40sraoss.co.jp 向後移植:9.6,最早支援的版本 https://git.postgresql.org/pg/commitdiff/2ded19fa3a4dafbae80245710fa371d5163bdad4

  • 修正規劃器使用 Result Cache 與唯一連線的問題。當規劃器考慮使用 Result Cache 節點來緩存巢狀迴圈連線內部的結果時,它未能考慮到內部路徑的參數化可能不是整個連線條件。如果連線被標記為 inner_unique,那麼我們可能會意外地將快取置於 singlerow 模式。這意味著在緩存第一列之後,條目將被標記為完整。這是錯誤的,因為如果僅部分連線條件被參數化,則 Result Cache 層級無法保證唯一連線的唯一性。只有在巢狀迴圈應用連線過濾器後才能保證唯一性。如果找到後續列,這將導致:ERROR: cache entry already complete 可以透過僅在整個連線條件被參數化時才將快取置於 singlerow 模式來修正此問題。但是,當連線是唯一的時候,巢狀迴圈只會讀取其內部,直到第一個匹配的列,這可能意味著我們永遠沒有機會將快取條目標記為完整。由於非完整的快取條目對於後續查找毫無用處,因此我們只是不考慮這種情況下的 Result Cache 路徑。順便一提,刪除聲稱上述 ERROR 更適合作為 Assert 的 XXX 註解。在出現觸發它的實際案例後,最好將其保留為 ERROR。回報者:David Christensen 討論:https://postgr.es/m/CAOxo6X+dy-V58iEPFgst8ahPKEU+38NZzUuc+a7wDBZd4TrHMQ@mail.gmail.com https://git.postgresql.org/pg/commitdiff/9e215378d7fbb7d4615be917917c52f246cc6c61

Michaël Paquier 推送

Fujii Masao 推送

  • 修正 pg_stat_wal 中的問題。1) 之前同時存在 pgstat_send_wal() 和 pgstat_report_wal(),以便將 WAL 活動傳送到統計收集器。前者由 wal writer 使用,後者由大多數其他進程使用。它們有點多餘,因此此提交將它們合併到 pgstat_send_wal() 中以簡化程式碼。2) 之前 WAL 全域統計計數器被計算出來,然後與填滿零的緩衝區進行比較,以確定自上次提交以來是否發生任何 WAL 活動。這些計算和比較並不便宜。即使在唯讀工作負載中,也經常執行此操作。此提交通過直接檢查某些 WAL 活動計數器來確定是否要發送 WAL 活動統計資訊來修正此問題。3) 之前 pgstat_report_stat() 沒有檢查是否有 WAL 活動統計資訊作為頂部的「如果沒有任何操作,則不要花費時鐘檢查」檢查的一部分來發送。在沒有通過其他條件之一的情況下,擁有待處理的 WAL 統計資訊可能很少見,但為了安全起見,此提交會更改 pgstat_report_stats(),以便它也檢查頂部的一些 WAL 活動計數器。此提交還添加了有關 WAL 統計資訊設計的註解。回報者:Andres Freund 作者:Masahiro Ikeda 審閱者:Kyotaro Horiguchi, Atsushi Torikoshi, Andres Freund, Fujii Masao 討論:https://postgr.es/m/20210324232224.vrfiij2rxxwqqjjb@alap3.anarazel.de https://git.postgresql.org/pg/commitdiff/d8735b8b4651f5ed50afc472e236a8e6120f07f2

  • 使待命伺服器升級將恢復暫停狀態重設為「未暫停」。如果在恢復暫停時觸發升級,暫停狀態將結束,升級將繼續。但之前在這種情況下,pg_get_wal_replay_pause_state() 在升級正在進行時錯誤地返回「暫停」。此提交更改了待命伺服器升級,以便在觸發升級時將恢復暫停狀態標記為「未暫停」,以修正此問題。作者:Fujii Masao 審閱者:Dilip Kumar, Kyotaro Horiguchi 討論:https://postgr.es/m/f706876c-4894-0ba5-6f4d-79803eeea21b@oss.nttdata.com https://git.postgresql.org/pg/commitdiff/167bd4804995afd654bd97ca9486acbece24377e

Amit Kapila 推送

  • 修正 020_messages.pl 測試。在建立訂閱後,我們沒有等待發布者趕上訂閱者。現在,即使我們在測試中停用了訂閱,apply worker 也可以開始複製。這將使測試期望沒有活動的槽,但存在一個。通過允許發布者等待趕上訂閱來修正此症狀。確保槽是否仍然處於活動狀態,通過檢查 walsender 是否存在並不是一個好主意,因為我們在清理 walsender 相關記憶體後釋放了槽。通過檢查 pg_replication_slots 中的槽狀態來修正此問題。此外,最好避免重複啟用/停用訂閱。最後,我們關閉此測試的自動清理,以避免在消耗變更時測試中出現任何空交易。回報者:根據 buildfarm 作者:Vignesh C 審閱者:Amit Kapila, Michael Paquier 討論:https://postgr.es/m/CAA4eK1+uW1UGDHDz-HWMHMen76mKP7NJebOTZN4uwbyMjaYVww@mail.gmail.com https://git.postgresql.org/pg/commitdiff/0a442a408b40d2c6710de7e5397cb2e769d8c630

  • 修正了多個複製 truncate 同一張資料表的死鎖問題。在套用 truncate 變更時,邏輯套用 worker 會在要被 truncate 的關係上取得 RowExclusiveLock。這允許兩個套用 worker 同時 truncate 同一張資料表,導致死鎖。原因是其中一個 worker 在更新 pg_class tuple 後,嘗試取得該關係的 SHARE 鎖,並開始等待第二個 worker,而第二個 worker 已經取得了該關係的 RowExclusiveLock。當第二個 worker 嘗試更新 pg_class tuple 時,它開始等待第一個 worker,導致死鎖。解決方法是在套用 truncate 變更之前,像正常的 truncate 操作一樣,取得該關係的 AccessExclusiveLock。作者:Peter Smith,測試案例:Haiying Tang,審閱者:Dilip Kumar、Amit Kapila,回溯修補:11,討論:https://postgr.es/m/CAHut+PsNm43p0jM+idTvWwiGZPcP0hGrHMPK9TOAkc+a4UpUqw@mail.gmail.com https://git.postgresql.org/pg/commitdiff/6d0eb38557155855539cd007f04736dc3b2ba16f

Dean Rasheed 推送了

Andrew Dunstan 推送了

待處理的 Patches

Yugo Nagata 送來了另一個修訂版的 patch,以實現增量具體化視圖。

Amul Sul 送來了另一個修訂版的 patch,將 WAL 寫入程式碼與 StartupXLOG() 分開,使用全域障礙實現 WAL 禁止狀態,在 WAL 寫入的 START_CRIT_SECTION 之前出錯或斷言,並記錄所有這些。這是實現 ALTER SYSTEM READ {ONLY | WRITE} 的基礎結構,等等。

Pavel Stěhule 送來了另一個修訂版的 patch,以實現 schema 變數。

Bharath Rupireddy 送來了另一個修訂版的 patch,以避免在 slot_store_error_callback 和 conversion_error_callback 中存取目錄。

Amit Langote 送來了一個 patch,重新措辭 pathnodes.h 中的一些註釋,以使其更清晰。

Ranier Vilela 送來了另一個修訂版的 patch,以修復 zic 中可能發生的記憶體損壞。

Bharath Rupireddy 送來了三個修訂版的 patch,以收緊 PostgreSQL FDW 中針對非數值 batch_size 和 fetch_size 選項的限制。

Masahiro Ikeda 送來了另兩個修訂版的 patch,以提高報告 WAL 統計資訊的效能,而無需引入新變數。

Hou Zhijie 和 Amit Langote 交換了 patch,以便在存在常數分割區鍵時跳過分割區 tuple 路由。

Peter Smith 和 Ajin Cherian 交換了 patch,以將對準備好的事務的支援添加到內建的邏輯複製,為流式事務添加 prepare API 支援,並跳過邏輯複製的空事務。

Amit Langote 送來了四個修訂版的 patch 到 pgoutput,以修復 RelationSyncEntry.map 的記憶體管理,方法是在使擁有它的同步條目失效時釋放分配的記憶體來建立 tuple-conversion map 及其元件 TupleDescs,並在根本不需要 map 的情況下釋放 TupleDescs。

Nitin Jadhav 送來了另兩個修訂版的 patch,以從 create_list_bounds() 中刪除額外的 malloc,將 PartitionListValue 分配為單個塊,在 create_hash_bounds 中對 PartitionHashBound 執行相同的操作,批量分配 datum 陣列以避免 palloc 開銷,並在 create_range_bounds() 中 pfree 中間結果。

Bertrand Drouvot 送來了另一個修訂版的 patch,以在 pgupgrade 中保留 oldestxid。

Andrew Dunstan 送來了另一個修訂版的 patch,以實現 SQL/JSON 函數。

Andrew Dunstan 送來了另一個修訂版的 patch,以實現 SQL/JSON JSON_TABLE。

Matthias van de Meent 送來了另一個修訂版的 patch,以改善 heapam 中行指標陣列截斷的用法。

Heikki Linnakangas 送來了一個 patch,允許多次指定 pg_waldump --rmgr 選項。

Robert Haas、Dilip Kumar 和 Kyotaro HORIGUCHI 交換了 patch,旨在修復一個以恢復中的競爭條件形式表現出來的錯誤。

Takashi Menjo 送來了另一個修訂版的 patch,將 PMEM 上的 WAL 段檔案映射為 WAL 緩衝區。

Justin Pryzby 送來了另一個修訂版的 patch,以實現 FPI 的不同壓縮方法。

Takamichi Osumi 送來了一個 patch,禁止在 user_catalog_table 上執行 TRUNCATE。

Peter Eisentraut 和 Álvaro Herrera 交換了 patch,以將 NO_INSTALL 選項添加到 pgxs。

Bharath Rupireddy 送來了三個修訂版的 patch,以消除使用 "non-negative" 的錯誤訊息的歧義。

Daniel Gustafsson 送來了兩個修訂版的 patch,以擴展 configure_test_server_for_ssl 以添加擴充功能,並添加 sslinfo 的測試。

Mathis Rudolf 送來了一個 patch,旨在修復一個以 REFRESH MATERIALIZED VIEW CONCURRENTLY 中的別名衝突形式表現出來的錯誤,方法是在 'refresh_by_match_merge()' 中將前綴 _pg_internal_ 添加到 'mv' 和 'newdata' 等別名,這使得它不太可能導致與使用者建立的 MV 發生任何衝突。

Yura Sokolov 送來了一個 patch,將 PortalDrop 呼叫添加到 exec_execute_message()。

Bharath Rupireddy 和 Peter Smith 交換了 patch,以重構 parse_subscription_options 中的 "互斥選項" 錯誤報告程式碼。

Michaël Paquier 送來了另一個修訂版的 patch,以切換 pg_upgrade 的測試以使用 TAP。

Greg Nancarrow 送來了另一個修訂版的 patch,以修復並行 worker 失敗的斷言和核心轉儲。

Kirill Reshke 送來了一個 patch,旨在通過在 KnownAssignedXids 中使用雙向鏈結串列來修復以慢速備用快照形式表現出來的錯誤。

Paul Guo 送來了一個 patch,通過使其可寫來修復由於唯讀檔案 open() 錯誤而導致的 pg_rewind 失敗。

Alexander Pyhalov 送來了一個 patch,使其能夠將具有函數 RTE 的 join 推送到 PostgreSQL 資料來源。

Nitin Jadhav 送來了另一個修訂版的 patch,以支援 tzh tzm 模式。

Michaël Paquier 送來了一個 patch,強制在伺服器中停用 SSL 重新協商。

Ivan Panchenko 送來了另一個修訂版的 patch,使其可以在登入時觸發操作。

Takayuki Tsunakawa 送來了另一個修訂版的 patch,以在重寫器中傳播 CTE 屬性標誌。

Ashutosh Bapat 送來了兩個修訂版的 patch,以在 LogicalIncreaseXminForSlot() 中報告新的 catalog_xmin 候選者。

Michaël Paquier 送來了另一個修訂版的 patch,以將驗證的資料添加到 pg_stat_activity。

Bharath Rupireddy 送來了另一個修訂版的 patch,以重新措辭並行 vacuum 的錯誤訊息和文件。

Hou Zhijie 送來了兩個修訂版的 patch,旨在修復一個以 batch_size > 65535 時導致 FDW 批次插入失敗的形式表現出來的錯誤。

Dmitry Dolgov 送來了另一個修訂版的 patch,以實現索引跳過掃描。

Tomáš Vondra 送來了一個 patch,旨在修復一個以 REFRESH MATERIALIZED VIEW 效能下降的形式表現出來的錯誤。

Michaël Paquier 和 Tom Lane 交換了程式碼,以減少 pg_attribute 結構的記憶體佔用量。

David Rowley 發送了另一個修補程式版本,以加速使用 Consts 集合的 NOT IN() 運算。

Vigneshwaran C 發送了另一個修補程式版本,為 PUBLICATION 和 SUBSCRIPTION 指令中缺少的選項添加 Tab 鍵自動完成功能。