PostgreSQL 每週新聞 - 2021 年 1 月 10 日

發布於 2021-01-11,作者:PWN
PWN

PostgreSQL 每週新聞 - 2021 年 1 月 10 日

PostgreSQL 產品新聞

pg_back 1.10,一個 PostgreSQL 的備份腳本,已發布。https://github.com/orgrim/pg_back

pgagroal 1.1.0,一個 PostgreSQL 的高性能、原生協議連線池,已發布。https://agroal.github.io/pgagroal/release/announcement/2021/01/05/pgagroal-1.1.0.html

Veil2 0.9.2 beta,一個 Postgres 的資料庫安全附加元件,提供實作具有列級別安全性的虛擬私有資料庫的框架,已發布。https://marcmunro.github.io/veil2/html/index.html

一月份的 PostgreSQL 工作

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

PostgreSQL 新聞

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

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

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

已套用的修補程式

Amit Kapila 推送了

Michaël Paquier 推送了

Tom Lane 推送了

  • 新增核心語法可以有多個解析目標的功能。此修補程式本質上允許 gram.y 實現一系列相關的語法樹,而不是必須始終解析 SQL 語句列表。 raw_parser() 獲得了一個新參數 enum RawParseMode,來說明要做什麼。作為概念驗證,新增一種僅解析 TypeName 而沒有任何其他裝飾的模式,並使用它來大大簡化 typeStringToTypeName()。此外,建立一個新的 SPI 進入點 SPI_prepare_extended(),以允許 SPI 使用者(尤其是 plpgsql)訪問此新功能。為了希望使這成為 SPI_prepare() 的最後一個變體,將其附加參數設定為一個結構,而不是直接參數,並承諾該結構的未來新增內容可以預設為零。 SPI_prepare_cursor() 和 SPI_prepare_params() 或許可以在某個時候消失。討論:https://postgr.es/m/4165684.1607707277@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/844fe9f159a948377907a63d0ef3fb16dc51ce50

  • 重新實作 pl/pgsql 的表達式和賦值語法分析。發明新的 RawParseModes,讓核心語法可以直接處理 pl/pgsql 的表達式和賦值,從而擺脫 pl/pgsql 語法分析器中的大量 hack。這將相當多的 pl/pgsql 知識轉移到核心程式碼中:值得注意的是,我們必須發明一個 CoercionContext 來匹配 pl/pgsql 針對賦值強制轉換(coercions)的(相當可疑的)歷史行為。這偏離了 pl/pgsql 作為核心程式碼延伸的最初想法,但實際上我們很久以前就跨過了這座橋樑。這樣做的主要優點是,我們現在可以使用核心語法分析器來生成 FieldStore 和/或 SubscriptingRef 節點,以處理對屬於記錄或陣列的 pl/pgsql 變數的賦值。這修正了許多從未在 pl/pgsql 賦值中實作的情況,例如巢狀記錄和陣列切片,並且它允許 pl/pgsql 賦值支援 commit c7aba7c14 中引入的資料類型特定的下標(subscripting)行為。還有一些外觀上的好處:當 pl/pgsql 表達式中發生語法錯誤時,錯誤報告不再包含過去會加在表達式文字前的令人困惑的 "SELECT" 關鍵字。此外,似乎還有一些小的速度提升。討論:https://postgr.es/m/4165684.1607707277@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/c9d5298485b78a37923a23f9af9aa0ade06762db

  • 移除 pl/pgsql 內的 PLPGSQL_DTYPE_ARRAYELEM 資料類型。在前一個 commit 之後,我們實際上不再需要這個了,因為陣列賦值主要由核心程式碼處理。仍然可能接觸到該程式碼的唯一方法是,GET DIAGNOSTICS 的目標變數可能是陣列元素。但這似乎不是一個特別重要的功能。我曾在 commit 55caaaeba 中新增了它,但只是因為它很容易實現,而不是因為有人真正要求它。因此,恢復該 patch,然後移除現在無法訪問的東西。(如果我們真的必須這樣做,我們或許可以使用新的賦值機制重新實作 GET DIAGNOSTICS;但成本/效益比看起來非常差,而且它可能會慢一點。)請注意,PLPGSQL_DTYPE_RECFIELD 仍然存在。我們也可能擺脫它,但維持 RECORD 類型變數的現有行為似乎可能很困難。由於這些程式碼路徑中沒有像 ARRAYELEM 程式碼那樣的功能限制,因此我沒有繼續研究這個想法。討論:https://postgr.es/m/4165684.1607707277@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/1788828d33516809fa2d842bf6e273d78e21d957

  • 重新思考 pl/pgsql 中的「讀/寫參數」機制。先前重新實作 pl/pgsql 內陣列元素賦值的 patch 效能問題讓我意識到,讀/寫參數機制的設計不佳。我們真正想要的是,不是要求賦值來源表達式使其對目標變數的所有引用都可以作為 R/W 傳遞,而是要識別對目標變數的一個引用作為 R/W 傳遞,允許任何其他引用像預設情況下一樣作為唯讀傳遞。只要 R/W 引用是表達式中頂層(因此是最後執行的)函數的直接參數,將 R/O 引用傳遞給表達式的其他較低部分就沒有任何損害。頂層函數的多個參數是 R/W 也沒有任何用例。因此,重新編寫該邏輯以識別引用目標變數的單個 Param,並且僅使該 Param 傳遞讀/寫引用,而不是引用目標變數的任何其他 Param。討論:https://postgr.es/m/4165684.1607707277@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/1c1cbe279b3c6e8038c8f8079402f069bb4cea4c

  • 修正 substring() 函數中的整數溢位邊緣情況。如果子字串起始索引和長度相加時溢位,substring() 的行為不正確,要么在應該成功的案例中拋出虛假的「負子字串長度」錯誤,要么未能抱怨負長度是負數(而是在大多數情況下返回整個字串)。毫不奇怪,該函數的 text、bytea 和 bit 變體都存在此問題。重新排列邏輯以確保始終拒絕負長度,並新增溢位檢查以處理另一種情況。此外,還在 detoast_attr_slice() (以前的 heap_tuple_untoast_attr_slice()) 中安裝了類似的保護,因為遠非清楚的是,沒有其他導致該函數的程式碼路徑可以傳遞會溢位的值。由我自己和 Pavel Stehule 根據 Rafi Shamim 的錯誤 #16804 進行了修復。回溯到 v11。雖然這些錯誤很舊,但用於溢位偵測算術的 common/int.h 基礎架構在 commit 4d6ad3125 之前並不存在,而且這些錯誤行為似乎還不夠嚴重,不足以證明為較舊的分支開發獨立的修復程式是合理的。討論:https://postgr.es/m/16804-f4eeeb6c11ba71d4@postgresql.org https://git.postgresql.org/pg/commitdiff/4bd3fad80e5c3bd107583dd9d32d4a47c045a3ec

  • 引入一個新的 GUC_REPORT 設定 "in_hot_standby"。除了可以透過 SHOW 查詢之外,該值會在會話啟動時立即發送到客戶端,並且如果伺服器在會話期間升級為主伺服器,則會再次發送。即時報告將在即將推出的 patch 中使用,以避免在嘗試連接到主伺服器時進行額外的往返。Haribabu Kommi、Greg Nancarrow、Tom Lane;由 Laurenz Albe、Takayuki Tsunakawa、Peter Smith 多次審閱。討論:https://postgr.es/m/CAF3+xM+8-ztOkaV9gHiJ3wfgENTq97QcjXQt+rbFQ6F7oNzt9A@mail.gmail.com https://git.postgresql.org/pg/commitdiff/bf8a662c9afad6fd07b42cdc5e71416c51f75d31

  • 允許 psql 的 \dt 和 \di 顯示 TOAST 表格及其索引。以前,TOAST 物件會被無條件地抑制,但由於 \d 能夠列印它們,因此不太清楚為什麼這些變體不應該列印。相反,使用與系統目錄相同的規則:如果您編寫 'S' 修飾符或表格名稱模式,則可以查看它們。(實際上,由於幾乎沒有人會在他們的 search_path 中保留 pg_toast,因此實際上取決於您是否使用可以匹配 pg_toast.*. 的模式。)似乎不需要變更文件,因為文件已經說明了這種情況對於「系統物件」會發生;我們只是將 TOAST 表格分類為系統表格。Justin Pryzby,由 Laurenz Albe 審閱。討論:https://postgr.es/m/20201130165436.GX24052@telsasoft.com https://git.postgresql.org/pg/commitdiff/7d80441d2c8de5cd5d593e302bd14e8b19ee92d4

  • 從 commit 7d80441d2 還原不穩定的測試案例。我一時忘記了「owner」欄位在 buildfarm 中不會是穩定的。好吧,這些測試無論如何都沒有太大價值。討論:https://postgr.es/m/20201130165436.GX24052@telsasoft.com https://git.postgresql.org/pg/commitdiff/14d49f483d4c8a5a356e25d5e5ff5726ca43abff

  • 為正規表示式套件新增一個測試模組。此模組提供一個名為 test_regex() 的函式,其功能與 regexp_matches() 相當類似,但具有額外的除錯導向選項和額外輸出。這些除錯選項有點隱晦;它們的選擇是為了符合 Henry Spencer 很久以前為 Tcl 編寫的測試工具的 API。有了這個,我們可以匯入 Spencer 最初編寫的所有測試案例,即使是我們目前在 Postgres 中沒有公開的正規表示式功能。這似乎是必要的,因為我們不再能依賴 Tcl 作為上游來驗證我們所做的任何修復或改進。除了 Spencer 的測試之外,我還為後向斷言(back lookbehind constraints,我們在 2015 年新增的,而 Tcl 仍然沒有吸收)新增了一些測試,這些測試是仿照他對前向斷言(lookahead constraints)的測試。在查看程式碼覆蓋率報告後,我還加入了一些測試,以更充分地執行我們的「高彩圖 (high colormap)」邏輯。根據我的測試,這使 src/backend/regex/ 的 check-world 覆蓋率從 71.1% 提高到 86.7%。(coverage.postgresql.org 顯示的數字略有不同,我認為這是因為它測量的是一個非 assert 組建。)討論:https://postgr.es/m/2873268.1609732164@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/ca8217c10138fa3ffe1e7d1def2484fd0eb78226

  • 新增 idle_session_timeout。這個 GUC 變數的工作方式與 idle_in_transaction_session_timeout 非常相似,它會終止等待新客戶端查詢時間過長的連線。但是,它適用於我們不在交易中時,而不是在交易中時。Li Japin, 由 David Johnston 和 Hayato Kuroda 審閱,我做了一些修復。討論:https://postgr.es/m/763A0689-F189-459E-946F-F0EC4458980B@hotmail.com https://git.postgresql.org/pg/commitdiff/9877374bef76ef03923f6aa8b955f2dbcbe6c2c7

  • 改進 timeout.c 對重複 timeout set/cancel 的處理。一個非常常見的用法模式是,我們設定一個預期不會到達的逾時,稍後取消它,然後重複。使用 timeout.c 的原始實現,這會導致每個逾時設定或取消都會調用一次 setitimer()。透過延遲更改逾時中斷請求,我們可以做得更好,即:(1) 永遠不要取消未完成的中斷,即使我們沒有活動的逾時事件;(2) 如果我們需要設定一個中斷,但是已經有一個在中斷請求時間或之前擱置的中斷,則不要動它。當中斷發生時,訊號處理常式將在當時需要的任何時間重新安排它。例如,對於 statement_timeout 的一秒設定,無論我們在之間執行多少語句,此方法都只需要每秒與核心交互多一點。在第一次之後,主程式碼可能根本不會調用 setitimer(),而每次訊號處理常式觸發時,它都會看到當時擱置的請求距離大約一秒,這時它會設定下一個中斷請求。之後的每個主線 timeout-set 請求都會觀察到它想要的時間超過了擱置的中斷請求時間,並且什麼也不做。這對於使用幾種不同逾時長度的情況也適用,只要它們都不短。但這很好地描述了我們的用法。想法和原始補丁由 Thomas Munro 提出;我修正了一個競爭條件並改進了註釋。討論:https://postgr.es/m/CA+hUKG+o6pbuHBJSGnud=TadsuXySWA7CCcPgCt2QE9F6_4iHQ@mail.gmail.com https://git.postgresql.org/pg/commitdiff/09cf1d52267644cdbdb734294012cf1228745aaa

  • 改進 timeout.c 中的註解。重新閱讀後,我意識到我錯過了新逾時程式碼中的一個競爭條件。它是安全的,但新增一條註解來解釋它。討論:https://postgr.es/m/CA+hUKG+o6pbuHBJSGnud=TadsuXySWA7CCcPgCt2QE9F6_4iHQ@mail.gmail.com https://git.postgresql.org/pg/commitdiff/9486e7b666fd113f043d5f091fd42bc1ef72acd8

  • 修正測試註解中的錯誤連結。我顯然在 commit ca8217c10 中複製並貼上了錯誤的連結。將其指向它應該去的地方。https://git.postgresql.org/pg/commitdiff/f7a1a805cb178653ea2a6c8991ad73b035af953e

  • 關於 idle_session_timeout 補丁的進一步思考。經過反思,PostgresMain() 中的操作順序是錯誤的。這些逾時應該在我們執行 post-command-read CHECK_FOR_INTERRUPTS 之前(而不是之後)關閉,以保證任何逾時錯誤都會在那裡被檢測到,而不是在一些定義不明的稍後時間點(可能是在浪費了大量工作之後)。這實際上是原始的 idle_in_transaction_timeout 補丁中的一個錯誤,因此反向移植到引入該補丁的 9.6 版本。https://git.postgresql.org/pg/commitdiff/b8d0cda53377515ac61357ec4a60e85ca873f486

  • 調整 createdb TAP 測試以在最新的 OpenBSD 上工作。我們在去年 2 月發現,commit 008cf0409 新增的錯誤案例測試在 OpenBSD 上失敗,因為該平台並未真正檢查 locale 名稱。當時,這似乎只是 LC_CTYPE 的問題,但是在較新版本的 OpenBSD 上進行測試表明,它現在對 LC_COLLATE 也同樣寬鬆。與其也刪除 LC_COLLATE 測試,不如放回 LC_CTYPE (還原 c4b0edb07),並調整這些測試以接受如果 setlocale() 不拒絕偽造的 locale 名稱,我們將獲得的不同錯誤訊息。這些測試的重點並不在於後端如何處理 locale 名稱,而是要顯示 createdb 安全地引用了有趣的 locale 名稱;因此我們不會以這種方式失去測試的可靠性。適當地進行反向移植。討論:https://postgr.es/m/231373.1610058324@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/9ffe2278372d7549547176c23564a5b3404d072e

  • 修正解析 BRE 模式正規表示式中的一個古老錯誤。brenext() 在解析一個 '*' 量詞時,忘記為 token 返回任何「值」;根據 next() 中的等效情況,它應該返回值 1 以指示需要 greedy 行為而不是 non-greedy 行為。結果是,如果我們很不巧在這一點上 v->nextvalue 中有一個零,編譯後的 regexp 可能表現得像 'x*?',而不是預期的 'x*'。如果我們在 BRE 模式 regexp 的開頭有 '.*',這似乎會以一定的可靠性發生,儘管這取決於堆疊分配結構的初始內容,因此不能保證會失敗。由 Alexander Lakhin 使用 valgrind 測試發現。此錯誤似乎是 Spencer 程式碼中的原生錯誤,因此一路反向移植。討論:https://postgr.es/m/16814-6c5e3edd2bdf0d50@postgresql.org https://git.postgresql.org/pg/commitdiff/afcc8772edcec687d87b6f762ca6113229af7291

  • 修正 debug_invalidate_system_caches_always 的 plpgsql 測試。Commit c9d529848 導致了另外幾個地方,其中失敗的錯誤上下文堆疊會根據 debug_invalidate_system_caches_always (nee CLOBBER_CACHE_ALWAYS) 而有所不同。由於如果計劃快取被覆蓋,我們必須重新解析快取計劃,這並不令人感到意外。透過隱藏這些地方的上下文堆疊來穩定預期的測試輸出,就像我們在這個測試腳本中的其他地方所做的那樣。(現在我們有了 debug_invalidate_system_caches_always,另一個值得考慮的想法是,強制它對於這些測試案例為零。這似乎有降低快取覆蓋測試的風險,這可能值得或不值得能夠驗證我們在正常情況下獲得了預期的錯誤輸出。目前,我只是堅持使用現有技術。)順便說一句,更新了引用 CLOBBER_CACHE_ALWAYS 的註解。根據 buildfarm 成員 hyrax。https://git.postgresql.org/pg/commitdiff/39d4a153105f0693d93f593a23e5144e2bd031ef

Thomas Munro 推送

Peter Geoghegan 推送

Peter Eisentraut 推送

Dean Rasheed 推送

Bruce Momjian 推送

Fujii Masao 推送

  • doc: 修正關於 recovery_target_timeline 預設行為的描述。recovery_target_timeline 的預設值在 v12 中已更改,但關於該預設行為的描述未更新。向後移植到 v12,其中 recovery_target_timeline 的預設行為已更改。作者:Benoit Lobréau 審閱者:Fujii Masao 討論:https://postgr.es/m/CAPE8EZ7c3aruEmM24GYkj8y8WmHKD1m9TtPtgCF0nQ3zw4LCkQ@mail.gmail.com https://git.postgresql.org/pg/commitdiff/25dde5835772a58356383bf1112c6c2a1a37df0e

  • 偵測後端程序與啟動程序之間的死鎖。在熱備用後端程序與啟動程序之間,可能會發生與鎖定衝突的恢復相關的死鎖。如果後端程序在資料表上取得排他存取鎖定,最終觸發死鎖,則可以如預期偵測到該死鎖。另一方面,先前,如果啟動程序取得排他存取鎖定,最終觸發死鎖,則該死鎖無法被偵測到,甚至可能在 deadlock_timeout 過後仍然存在。這是一個錯誤。造成此錯誤的原因是處理鎖定衝突恢復的程式碼完全沒有考慮死鎖的情況。它假設涉及啟動程序和後端程序的死鎖可以被後端程序內呼叫的死鎖偵測器偵測到。但這個假設是不正確的。啟動程序也應該在必要時呼叫死鎖偵測器。為了修復這個錯誤,此提交讓啟動程序在處理鎖定衝突恢復時達到 deadlock_timeout 時呼叫死鎖偵測器。具體來說,在這種情況下,啟動程序會要求所有持有衝突鎖定的後端程序檢查自身是否存在死鎖。回溯修補到 v9.6。v9.5 也存在此錯誤,但經過討論,我們決定不將此修補程式回溯修補到 v9.5。因為 v9.5 沒有一些此錯誤修復程式依賴的基礎程式碼 (例如,37c54863cf)。我們可以應用這些程式碼進行回溯修補,但由於下一個小版本發布是 v9.5 的最後一個版本,因此這樣做是有風險的。如果我們意外地透過回溯修補向 v9.5 引入新的錯誤,則沒有機會修復它。我們認為,回溯修補到 v9.5 會帶來比收益更大的風險。作者:Fujii Masao 審閱者:Bertrand Drouvot, Masahiko Sawada, Kyotaro Horiguchi 討論:https://postgr.es/m/4041d6b6-cf24-a120-36fa-1294220f8243@oss.nttdata.com https://git.postgresql.org/pg/commitdiff/8900b5a9d59a645b3485f5b046c4c7871b2c4026

  • 新增 GUC 以記錄恢復衝突中的長時間等待。此提交新增了 GUC log_recovery_conflict_waits,用於控制當啟動程序等待恢復衝突的時間超過 deadlock_timeout 時是否產生日誌訊息。這對於確定恢復衝突是否阻止恢復應用 WAL 非常有用。請注意,目前僅當在 deadlock_timeout 過後,恢復衝突尚未解決時,才會產生日誌訊息,也就是說,僅當啟動程序即使在 deadlock_timeout 過後仍在等待恢復衝突時。作者:Bertrand Drouvot, Masahiko Sawada 審閱者:Alvaro Herrera, Kyotaro Horiguchi, Fujii Masao 討論:https://postgr.es/m/9a60178c-a853-1440-2cdc-c3af916cff59@amazon.com https://git.postgresql.org/pg/commitdiff/0650ff23038bc3eb8d8fd851744db837d921e285

Tomáš Vondra 推送了

待處理的修補程式

Atsushi Torikoshi 發送了另一個修訂版本的修補程式,以實作 pg_get_target_backend_memory_contexts(),並使其能夠收集指定進程的記憶體上下文。

Atsushi Torikoshi 發送了另一個修訂版本的修補程式,以將 wait_start 欄位新增到 pg_locks 視窗。

Mark Zhao 發送了一個修補程式,旨在修復一個錯誤,該錯誤表現為分割資料表上的邏輯複製非常緩慢,並且消耗大量 CPU,方法是在 pgoutput.c 中於 RelationIdGetRelation 之後新增一個遺漏的 RelationClose。

Önder Kalacı 發送了另一個修訂版本的修補程式,以實作邏輯複製的列篩選。

Justin Pryzby 發送了一個修補程式,以允許在 BIND 階段報告參數值中的錯誤。

Pavel Stěhule 發送了另一個修訂版本的修補程式,使其能夠在 PL 中編寫視窗函數,以及在 PL/pgsql 中實作相同功能。

Bharath Rupireddy 發送了另外三個修訂版本的修補程式,使其能夠在 CTAS 中使用平行插入。

Kyotaro HORIGUCHI 發送了另外四個修訂版本的修補程式,旨在修復一個錯誤,該錯誤表現為備用伺服器無法追蹤時間軸切換,方法是確保 Walsender 在傳送歷史時間軸時追蹤時間軸切換。

Peter Smith 發送了另外四個修訂版本的修補程式,使其能夠使用多個 tablesync 工作程序。

Dilip Kumar 發送了另一個修訂版本的修補程式,以新增自定義資料表壓縮方法的選項。

Dmitry Dolgov 發送了另外三個修訂版本的修補程式,以將通用下標基礎架構用於 JSONB 操作。

Justin Pryzby 發送了另一個修訂版本的修補程式,以支援 pg_dump 中多種壓縮方法及其選項。

Masahiko Sawada 發送了一個修補程式,以引入 IndexAM API 來選擇索引 vacuum 策略,使用相同的方法來選擇索引 vacuum 策略,並且如果索引沒有增長,則跳過 btree bulkdelete。

Thomas Munro 發送了另一個修訂版本的修補程式,以減少 WaitEventSet 系統呼叫流失。

Pavel Stěhule 發送了一個修補程式,以新增一個選項,用於在 PL/pgsql 中使用參數和本機變數參考的簡寫。

Dmitry Dolgov 發送了另一個修訂版本的修補程式,以防止 ArrayExpr 中的每個元素被打亂,以防止 pg_stat_statements 為本質上相似的查詢產生不同的條目。

Tom Lane 發送了一個 PoC 修補程式,用於處理 MacOS 的 SIP 基礎架構如何適用於動態函式庫。

Amit Kapila 發送了一個修補程式,用於追蹤邏輯複製中回滾的複製來源進度,因為某些情況下追蹤 2PC 的修補程式遺漏了。

Paul Martinez 發送了一個修補程式,用於在參考完整性觸發程序中新增部分外部索引鍵更新。

Bruce Momjian 發送了另外兩個修訂版本的修補程式,以整合 /common 中的更多十六進位函數。

Shinya Kato、Masahiko Sawada 和 Fujii Masao 交換了修補程式,以完成 psql 中 CLOSE、FETCH 和 MOVE tab 補全的實作。

Daniel Gustafsson 發送了另外兩個修訂版本的修補程式,以支援在正在運行的叢集上啟用和停用校驗和。

Tsutomu Yamada 和 Tomáš Vondra 交換了修補程式,以將一系列以 \dX 開頭的函數新增到 psql,這些函數處理擴展統計資料。

Bharath Rupireddy 發送了另外兩個修訂版本的修補程式,以新增一個 postgres_fdw 函數來丟棄快取連線,新增一個 postgres_fdw.keep_connections GUC 來控制是否快取連線,並新增一個類似的伺服器級別 keep_connection GUC。

Ryo Matsumura 在 libpq 追蹤修補程式之上發送了一個修補程式,以修復其中的一些疏忽。

Kyotaro HORIGUCHI 再次提交了一個修補程式的修改版本,旨在修復一個錯誤,該錯誤表現為 WAL 重播期間的損壞,方法是延遲檢查點完成,直到截斷成功後才進行。

Greg Sabino Mullane 再次提交了一個修補程式的修改版本,以使 psql 的 \df 能夠按輸入類型選擇函數。

Movead Li 再次提交了一個修補程式的修改版本,以修復 wal 切換的 waldump 大小。

Kirk Jamison 再次提交了一個修補程式的修改版本,以使用 dlist 更有效地刪除關係緩衝區。

Michaël Paquier 再次提交了一個修補程式的修改版本,以將 SHA1 添加到 cryptohash 基礎架構。

Julien Rouhaud 再次提交了一個修補程式的修改版本,以將 pg_stat_statements 查詢混亂移動到核心,在 pg_stat_activity 和 log_line_prefix 中公開 queryid,並在 verbose explain 中公開查詢標識符。

Laurenz Albe 再次提交了兩個修補程式的修改版本,以將會話統計信息添加到 pg_stat_database。

Zeng Wenjing 提交了一個 PoC 修補程式,以實現全域索引。

Bharath Rupireddy 再次提交了三個修補程式的修改版本,以實現 REFRESH MATERIALIZED VIEW 的 EXPLAIN [ANALYZE]。

Masahiko Sawada 提交了一個修補程式,旨在修復一個錯誤,該錯誤表現為邏輯複寫工作程序在錯誤上下文回调中訪問目錄,方法是將本地和遠端類型名稱都儲存在 SlotErrCallbackArg 中,以便可以只在錯誤回调中設置名稱,而無需系統快取查找。

Vigneshwaran C 提交了一個修補程式,以添加對 PUBLICATION 的 schema 層級支持。

Mark Dilger 再次提交了兩個修補程式的修改版本,以添加一個新的 pg_amcheck contrib 模組,這是一個命令行界面,用於針對表和索引運行 amcheck 的驗證。

Thomas Munro 提交了一個修補程式,以將 FreeBSD 添加到具有 fdatasync 的平台列表中。

Kyotaro HORIGUCHI 再次提交了一個修補程式的修改版本,以通過將其用於臨時儲存的文件替換為共享記憶體來提高統計信息收集器的效率。

Michaël Paquier 再次提交了一個修補程式的修改版本,以重構 HMAC 實現以減少重複。

Pavel Stěhule 再次提交了一個修補程式的修改版本,以減少從 PL/pgSQL 在 no atomic 模式下執行 CALL 語句的開銷。

Kyotaro HORIGUCHI 再次提交了一個修補程式的修改版本,以使 ALTER TABLE SET [UN]LOGGED 避免堆重寫,當 wal_level > minimal 時更改 SET LOGGED,以便它使用 XLOG_FPI 而不是大量的 HEAP_INSERT 發出 WAL,並允許清理在創建它的事務崩潰後留下的文件。

Pavel Stěhule 提交了一個修補程式,以添加一種將變數內容的文本值返回到 PL/pgsql 偵錯 API 的方法。

Pavel Stěhule 提交了一個修補程式,以使 psql 的 \watch 命令可以使用特殊的 pager。

Tomáš Vondra 再次提交了一個修補程式的修改版本,以使可以在表達式上創建擴展統計信息。

Simon Riggs 再次提交了四個修補程式的修改版本,以實現系統版本化表。

Peter Eisentraut 再次提交了一個 pageinspect 的修補程式的修改版本,它將塊號參數的類型更改為 bigint,以避免溢出。

Bruce Momjian 再次提交了四個修補程式的修改版本,以添加密鑰管理的測試。

Álvaro Herrera 和 Tomáš Vondra 交換了修補程式以實現 MERGE。

Pavel Stěhule 和 Erik Rijkers 交換了修補程式以實現 schema 變數。

Álvaro Herrera 和 Justin Pryzby 交換了修補程式以實現 ALTER TABLE ... DETACH PARTITION CONCURRENTLY。

Noah Misch 提交了一個修補程式,以修復 pg_dump 在初始權限中對 GRANT OPTION 的處理。

Krasiyan Andreev 再次提交了一個修補程式的修改版本,以實現窗口函數的 NULL 處理。

Michael Banck 提交了一個修補程式,以修復 psql 的 \watch 在相關查詢不返回行的情況下無法正常運作的問題。

Thomas Munro 提交了一個修補程式,以在 pg_test_fsync 中使用 pg_pwrite(),以保持與 PostgreSQL 現在所做的一致性。

Justin Pryzby 再次提交了一個修補程式的修改版本,以修復 libpq 中實現可插拔壓縮的修補程式中的一些文檔和註釋。

Noah Misch 再次提交了一個修補程式的修改版本,旨在修復一個錯誤,該錯誤表現為通過 SimpleLruTruncate() 捨入的虛假“顯式回繞”。

Shenhao Wang 提交了一個修補程式,旨在修復 Windows 上文件 backup_label 問題中顯示的錯誤,方法是在讀取 backup_label 和 tablesapce_map 時設置文本模式。

Tatsuo Ishii 提交了一個修補程式,以修復文檔中缺少首字母縮略詞標籤的問題。

Tomáš Vondra 再次提交了一個修補程式的修改版本,以在 COPY FREEZE 中設置 PD_ALL_VISIBLE 和可見性映射位,從而彌補了頁面級別標誌更新的不足。

Tom Lane 提交了一個修補程式,旨在修復一個錯誤,該錯誤表現為連線字串中的多個主機在非熱備份模式下未能進行故障轉移。