PostgreSQL 每週新聞 - 2021 年 2 月 21 日

發布於 2021-02-22,作者:PWN
PWN

PostgreSQL 每週新聞 - 2021 年 2 月 21 日

本週人物:https://postgresql.life/post/valeria_kaplan/

PostgreSQL 產品新聞

JDBC 42.2.19 已發布 https://jdbc.postgresql.org/documentation/changelog.html#version_42.2.19

Pgpool-II 4.2.2、4.1.6、4.0.13、3.7.18 和 3.6.25,PostgreSQL 的連線池和語句複寫系統已發布。https://www.pgpool.net/docs/42/en/html/release-4-2-2.html

pgBadger v11.5,一個用 Perl 编写的 PostgreSQL 日誌分析器和圖表工具,已發布。https://github.com/darold/pgbadger/releases

pg_probackup 2.4.10,一個用於管理 PostgreSQL 数据库集群的備份和恢復的工具,已發布。https://github.com/postgrespro/pg_probackup/releases/tag/2.4.10

pgFormatter 5.0,一個用於 SQL 代码的格式化工具,已發布。https://github.com/darold/pgFormatter/blob/master/ChangeLog

2 月份 PostgreSQL 工作

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

PostgreSQL 新聞

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

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

請在太平洋標準時間下午 3:00 之前,於週日之前將新聞和公告發送至 david@fetter.org。

已應用修補程式

Thomas Munro 推送

Tom Lane 推送

  • 修复了一些小问题,以改进正则表达式调试代码。 当定义 REG_DEBUG 时,请确保未填充的“struct cnfa”全部为零,而不仅仅是具有 nstates ==
  • 这主要是为了在 gdb 中查看“struct subre”结构时,不要被正则表达式编译期间的大量垃圾字段分散注意力。 调整一些打印调试输出的位置,使其在之后具有合适的 fflush 调用。 顺便说一句,更正一个错误的古老注释:由 parsebranch() 创建的连接 subre-s 具有 op == '.' 而不是 ','。 在摆弄一些正则表达式性能改进时注意到。 https://git.postgresql.org/pg/commitdiff/2dd6733108f2bea07b0a3469e768bd900c0808b3

  • 简化 nodeIncrementalSort.c 中的循环逻辑。 switchToPresortedPrefixMode() 中的内循环可以实现为传统的整数计数器 for() 循环,从而删除几个冗余的布尔状态变量。 此处的旧逻辑是早期开发的残余,但就目前情况而言,没有理由增加额外的复杂性。 此外,注释由 82e0e2930 添加的测试用例,以解释为什么它设法命中了该提交中修复的角落案例,并添加 EXPLAIN 以验证它是否正在创建增量排序计划。 像之前的补丁一样,反向移植到 v13。 James Coleman 和 Tom Lane 讨论:https://postgr.es/m/16846-ae49f51ac379a4cb@postgresql.org https://git.postgresql.org/pg/commitdiff/0e5290312851557ee24e3d6103baf14d6066695c

  • 將 tsginidx.c 的 GIN 索引邏輯轉換為完全三元運算。Commit 2f2007fbb 部分完成了此操作,但仍有兩個剩餘的缺陷。 checkcondition_gin 通过设置带外重新检查标志来处理一些不确定情况,一些通过返回 TS_MAYBE 来处理,一些则两者都做。 同时,TS_execute 任意地将 TS_MAYBE 结果转换为 TS_YES。 因此,如果 checkcondition_gin 选择仅返回 TS_MAYBE,则结果将是 TS_YES,而没有重新检查标志,这可能会导致错误的查询输出。 发生这种情况的情况是,如果传递给 gin_tsquery_[tri]consistent 的索引扫描结果中存在 GIN_MAYBE 条目,据我所知,只有当用于累积索引扫描结果的 tidbitmap 变得足够大而变得有损时才会发生这种情况。 我最初的想法是通过确保我们始终设置重新检查标志以及在不确定情况下返回 TS_MAYBE 来解决此问题。 但这会向另一个方向出错,可能会强制重新检查可证明与查询匹配的行(因为即使 TS_execute 后来发现答案必须是 TS_YES,重新检查标志仍然设置)。 相反,让我们完全消除带外重新检查标志,并依赖于返回 TS_MAYBE。 这需要导出 TS_execute 的一个版本,该版本实际上将返回评估的完整三元结果... 但我们很可能应该从一开始就这样做。 不幸的是,似乎无法添加涵盖此内容的回归测试用例:导致 GIN 位图变得有损所需的数据量导致运行时比我们认为在测试中想要的时间更长。 (我正在考虑允许较小的 work_mem 设置来改善这种情况,但这将是一个单独的补丁。) 根据 Dimitri Nüscheler 提出的错误 #16865。 反向移植到发生错误提交的 v13。 讨论:https://postgr.es/m/16865-4ffdc3e682e6d75b@postgresql.org https://git.postgresql.org/pg/commitdiff/38bb3aef354ca98ff88cb37337995039a3b5135f

  • 對 regex 程式碼進行了一些小改進。推送了一些從即將推出的修補程式系列中提取的、希望能無爭議的部分,以移除主要修補程式中不相關的雜亂內容。在 compact() 中,設定 REG_ASSERT 錯誤後立即返回;繼續迴圈只會導致下面的斷言失敗。(問我怎麼知道的。)在 parseqatom() 中,移除對 moresubs() 完成其工作的斷言。當 moresubs 實際上完成其工作時,這與該函數的最終斷言是多餘的;但當它因 OOM 失敗時,這是一個斷言崩潰。我們可以在斷言前新增一個 NOERR() 檢查來避免崩潰,但刪減程式碼似乎比新增程式碼更好。(請注意,在幾行之後有一個 NOERR 退出,並且從這裡到那裡之間的任何內容都不需要 moresubs 成功。所以我們真的不需要額外的錯誤退出。)這是一個在啟用斷言的組建中存在的錯誤,但由於 moresub 的微小分配中發生 OOM 的可能性非常低,我不認為值得進行回溯修補。另一方面,新增一個斷言來確保我們預期的 v->subs[subno] 目標在我們準備插入它時仍然為空似乎是值得的,因為它們之間存在遞迴。在 pg_regexec 中,確保我們在退出時 fflush 任何除錯輸出,並嘗試使 MDEBUG 訊息更加一致和有用。(特別是,確保所有訊息都以 subre 的 id 號碼作為前綴,以便可以將進入和退出報告匹配起來。)在 test_regex 中新增一些測試案例,以提高對 lookahead 和 lookbehind 約束的覆蓋率。現在新增這些主要是為了確定這確實是現有的行為。討論:https://postgr.es/m/1340281.1613018383@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/4e703d67193df0431c0740044d662d1feade73aa

  • 修復 BRE 模式正規表示式剖析中的另一個古老錯誤。在研究 regex 程式碼時,我碰巧注意到 commit afcc8772e 中消除的錯誤有一個同胞:在基本 RE 模式中剖析時,next() 無法為 "{m,n}" 量詞的 '}' token 傳回特定的值。同樣,這可能會導致將量詞視為非貪婪的,而在基本模式下它永遠不應該如此。要發生這種情況,設定 "nextvalue" 的 "}" 之前的最後一個字元必須將其設定為零,或者它必須從一開始就不小心為零。例如,可以使用以數字 "0" 結尾的邊界來重複觸發該故障。與先前的修補程式一樣,一路回溯修補。https://git.postgresql.org/pg/commitdiff/b5a66e7353ba65c11c5fc6a79b72213bde8dbe44

  • 在 regex 引擎中發明「彩虹」弧線。一些正規表示式結構,最顯著的是「.」符合任何字元的元字元,產生一束平行的 NFA 弧線,涵蓋所有可能的顏色(即字元等價類別)。我們可以透過將這些情況替換為帶有特殊顏色代碼「RAINBOW」的單個弧線,來顯著改善處理大型 regex 所需的空間和時間。這僅需要在 pull() 和 push() 等地方進行少許額外的複雜化。pg_reg_getoutarcs() 的呼叫者現在必須準備好看到 RAINBOW 弧線的可能性。對於一個已知的用戶 contrib/pg_trgm,這是一個淨收益,因為它可以減少要處理的弧線數量,並且處理方式與包含太多字元而無法單獨處理的其他顏色沒有任何不同。這是一個修補程式系列的一部分,該系列總體上將 regex 引擎在大量真實世界 regex 上的執行時間減少了大約四倍。由我修補,由 Joel Jacobson 審閱。討論:https://postgr.es/m/1340281.1613018383@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/08c0d6ad65f7c161add82ae906efb90dbd7f653d

  • 在 regex 引擎中識別「符合所有」NFA。這建立在先前的「彩虹」修補程式之上,以檢測將符合任何字串的 NFA,儘管可能對字串長度有限制。選擇此定義以符合諸如 ".*"".+"".{1,100}" 之類的結構。在最佳化通過後識別這樣的 NFA 相當便宜,因為我們基本上只需要驗證所有弧線都是 RAINBOW 弧線並計算到最終狀態的步數。(好吧,對於字串邊界條件的偽顏色弧線有一些複雜性,但不多。)一旦我們有了這些標記,regex 執行器函數 longest()、shortest() 和 matchuntil() 就不必花費每個字元的運算量來確定給定的子字串是否滿足這樣的 NFA;它們只需要根據邊界檢查其長度。由於某些匹配問題需要 O(N) 次呼叫這些函數,因此我們已將 N 個字元字串的執行時間從 O(N^2) 減少到 O(N)。當然,這對非 matchall 子模式沒有幫助,但這些模式通常有限制,使我們能夠避免首先需要 O(N) 子字串檢查。正是那些不受限制的「符合所有」情況造成了最大的麻煩。這是一個修補程式系列的一部分,該系列總體上將 regex 引擎在大量真實世界 regex 上的執行時間減少了大約四倍。由我修補,由 Joel Jacobson 審閱。討論:https://postgr.es/m/1340281.1613018383@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/824bf71902db4a2067b8d64583c9d88bb264c44b

  • 修復 regex 引擎以抑制無用的串聯子 RE。parsebranch() 的註釋聲稱它可以避免在 "subre" 樹中生成不必要的串聯節點,但它遺漏了一些重要情況。一旦我們確定給定的 atom 是 "messy" 並且無法與當前 regex 分支的前一個 atom 捆綁在一起,parseqatom() 總是生成兩個新的串聯節點,一個將 messy atom 串聯到分支中的後續節點,另一個上層節點將分支的前一部分串聯到該節點。但是如果 messy atom 是分支中的第一個、最後一個或唯一一個,則其中一個或兩個可能是不必要的。改進程式碼以抑制這種無用的串聯節點,以及表示分支空塊的無操作子節點。減少 subre 樹節點的數量不僅在執行時而且在編譯時都提供了顯著的節省,因為每個 subre 節點都有自己的 NFA,必須單獨進行最佳化。(也許有一天我們會弄清楚如何跨多個樹節點共享最佳化工作,但看起來並不容易。)消除上層樹節點尤其有用,因為它們往往具有更大的 NFA。這是一個修補程式系列的一部分,該系列總體上將 regex 引擎在大量真實世界 regex 上的執行時間減少了大約四倍。由我修補,由 Joel Jacobson 審閱。討論:https://postgr.es/m/1340281.1613018383@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/cebc1d34e5207c37871708f91be65dd839760b5f

  • 將正規表示式引擎的 subre 樹從二元樣式轉換為 N 元樣式。不再在 subre 結構中使用左子節點和右子節點連結,而是使用單一的子節點連結加上兄弟節點連結。現在透過追蹤兄弟節點鏈來存取樹節點的多個子節點。 這樣做的好處是 alternation 樹節點。具有 N (>1) 個分支的正規表示式現在由一個具有 N 個子節點的 alternation 節點表示,而不是由一個包含 N 個 alternation 節點以及 N 個子節點的樹表示。 雖然舊的表示方式在執行時實際上沒有增加額外的成本,但對於編譯目的來說卻非常糟糕,因為每個 alternation 節點都有自己的 NFA,而我們太笨了無法單獨進行最佳化。(更糟的是,所有這些 NFA 都描述了整個 alternation 模式,而不僅僅是樹結構中預期的那一部分。) 我們繼續要求 concatenation 節點正好有兩個子節點。現在,這個資料結構已準備好支援更多子節點,但執行器的邏輯需要一些仔細的重新設計,而且不清楚是否能獲得很多好處。 這是總共將正規表示式引擎在大型真實正規表示式語料庫上的執行時間縮短約四倍的補丁系列的一部分。 補丁由我提供,由 Joel Jacobson 審閱。討論:https://postgr.es/m/1340281.1613018383@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/581043089472816061a7fd381f40572191dfa48f

  • 避免為捕獲括號產生額外的 subre 樹節點。 以前,每對捕獲括號都會產生一個單獨的 subre 樹節點,其唯一功能是識別我們應該捕獲此特定子表達式的匹配詳細資訊。 在大多數情況下,我們並不需要這樣做,因為我們可以很好地將「捕獲此項」註釋放在執行實際匹配工作的子節點上。 與之前的兩個提交一樣,這樣做的主要價值是避免為一個實際上沒有發揮作用的樹節點產生和最佳化 NFA。 所選擇的資料表示法僅允許每個 subre 節點一個捕獲註釋。 在符合規範但不一定有用的情況下,如果確切相同的正規表示式位元周圍有多個捕獲括號(即「((xyz))」),則將子節點包裝在 N-1 個捕獲節點中,這些節點的作用與以前相同。 我們可以更努力地去做,但在有一些證據表明這些情況值得關注之前,我會避免這樣做。 順便說一句,改進 regex.h 中的註解,以說明所有不同的 re_info 位是什麼意思。 其中一些非常明顯,但其他一些則不太明顯,因此逆向工程一些文件。 這是總共將正規表示式引擎在大型真實正規表示式語料庫上的執行時間縮短約四倍的補丁系列的一部分。 補丁由我提供,由 Joel Jacobson 審閱。討論:https://postgr.es/m/1340281.1613018383@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/ea1268f6301cc7adce571cc9c5ebe8d9342a2ef4

Michaël Paquier 推送

Amit Kapila 推送

Peter Geoghegan 推送了

  • 調整 lazy_scan_heap() 的會計註解。解釋 tups_vacuumed 變數會計算哪些特定的 LP_DEAD 行指標。https://git.postgresql.org/pg/commitdiff/7cde6b13a9b630e2f04d91e2f17dedc2afee21c6

  • 避免在 pageinspect 中錯誤解讀 GiST 頁面。GistPageSetDeleted() 在刪除頁面時設定 pd_lower,並將頁面內容設定為 GISTDeletedPageContents。避免將已刪除的 GiST 頁面視為 pageinspect 中的常規槽式頁面。 commit 756ab291 的疏忽。作者:Andrey Borodin x4mmm@yandex-team.ru https://git.postgresql.org/pg/commitdiff/fa41cf8f183ac5d702e91da567e9b3375c632081

  • 將 "LP_DEAD item?" 欄位添加到 GiST pageinspect 函數。這使 gist_page_items() 和 gist_page_items_bytea() 與 nbtree 的 bt_page_items() 函數保持一致。對 commit 756ab291 的小幅後續處理,該 commit 添加了 GiST 函數。作者:Andrey Borodin x4mmm@yandex-team.ru 討論:https://postgr.es/m/E0794687-7315-4C29-A9C7-EC54D448596D@yandex-team.ru https://git.postgresql.org/pg/commitdiff/9e596b65f430fcb942685b41860b323398a88873

  • nbtree README:移動 VACUUM 線性掃描章節。在討論 VACUUM 刪除元組之後,但在討論 VACUUM 刪除頁面之前,討論 VACUUM 的線性掃描。這種進展方式更自然。同時稍微調整措辭。似乎沒有必要談論它在 PostgreSQL 8.2 之前是如何運作的。https://git.postgresql.org/pg/commitdiff/128dd901a5c87e11c6a8cbe227a806cdc3afd10d

  • 添加 nbtree README 關於頁面回收的章節。透過新增一個在頁面刪除之後的章節,整合關於 VACUUM 如何將頁面放入 FSM 以進行回收的討論。這種結構反映了 Lanin & Shasha 的論文中,頁面回收與頁面刪除是明確分離的事實。nbtree 中的頁面回收是該論文中所謂的「drain 技術」的實現。這種分離對於 nbtree VACUUM 來說是一個重要的概念。搜尋者必須檢測並從並發的頁面刪除中恢復,但他們永遠不必考慮並發的頁面回收。回收幾乎總是能被認為是一種底層的垃圾收集操作,它非同步地釋放支持邏輯樹節點的物理空間。幾乎所有程式碼只需要關心邏輯樹節點。(請注意,「邏輯樹節點」目前不是 nbtree 程式碼中的專業術語 -- 這一切都是隱式運作的。)這是為即將到來的修補程式做準備,該修補程式將教導 nbtree VACUUM 記住它在執行時刪除的頁面的詳細資訊。這使得相同的 VACUUM 操作可以在稍後到達 btvacuumscan() 的結尾時,考慮將其自己刪除的頁面放入 FSM 中。https://git.postgresql.org/pg/commitdiff/b071a311495bbf42ddf2466a556d033df8f0f5e7

Fujii Masao 推送了

  • 在 pg_locks 中,顯示進程開始等待鎖定的時間,第二版。此 commit 在 pg_locks 視窗中新增了新的欄位 "waitstart"。如果鎖定未被持有,此欄位會報告伺服器進程開始等待鎖定的時間。例如,當從 pg_locks 中的 "waitstart" 中減去當前時間,並識別進程等待時間非常長的鎖定時,此資訊非常有用。此功能使用死鎖超時計時器所取得的當前時間作為 "waitstart"(即此進程開始等待鎖定的時間)。由於重新取得當前時間可能會導致額外負擔,因此我們重複使用已取得的時間以避免該負擔。請注意,"waitstart" 的更新沒有持有鎖定表的分區鎖定,以避免因額外鎖定取得而造成的負擔。這可能會導致即使 "granted" 為 false,pg_locks 中的 "waitstart" 在等待開始後的很短時間內變為 NULL。這在實務上是可以接受的,因為我們可以假設使用者很可能會在長時間等待鎖定時查看 "waitstart"。此修補程式的第一次嘗試 (commit 3b733fcd04) 導致 buildfarm 成員 "rorqual" (使用 --disable-atomics --disable-spinlocks 構建) 報告迴歸測試失敗。它被 commit 890d2182a2 還原。此失敗的原因是在 prepare transaction 結束時建立的虛擬進程條目中的 "waitstart" 原子變數未初始化。第二次嘗試修正了該問題。提升 catalog 版本。作者:Atsushi Torikoshi 審閱者:Ian Lawrence Barwick, Robert Haas, Justin Pryzby, Fujii Masao 討論:https://postgr.es/m/a96013dc51cdc56b2a2b84fa8a16a993@oss.nttdata.com https://git.postgresql.postgresql.org/pg/commitdiff/46d6e5f567906389c31c4fb3a2653da1885c18ee

  • 修正 pg_stat_wal_receiver 中的 "invalid spinlock number: 0" 錯誤。Commit 2c8dd05d6c 將原子變數 writtenUpto 添加到 walreceiver 的共享記憶體資訊中。它僅在 walreceiver 啟動時初始化,但可以隨時通過 pg_stat_wal_receiver 視窗讀取,即,甚至在它被初始化之前。在 使用 --disable-atomics 和 --disable-spinlocks 構建的伺服器中,這個未初始化的原子變數讀取可能會導致 "invalid spinlock number: 0" 錯誤。此 commit 更改了 writtenUpto,使其在 postmaster 啟動時初始化,以避免通過 pg_stat_wal_receiver 讀取未初始化的變數並修復該錯誤。此外,此 commit 將 writtenUpto 的讀取移到釋放保護 walreceiver 共享變數的 spinlock 之後。這是必要的,以防止在持有另一個 spinlock 時,由於讀取原子變數而獲取新的 spinlock,並縮短 spinlock 的持續時間。此變更導致 writtenUpto 與受 spinlock 保護的其他 walreceiver 共享變數不一致。但這是可以接受的,因為 writtenUpto 不應用於資料完整性檢查。回溯修補到 v13,commit 2c8dd05d6c 在此版本中引入了該錯誤。作者:Fujii Masao 審閱者:Michael Paquier, Thomas Munro, Andres Freund 討論:https://postgr.es/m/7ef8708c-5b6b-edd3-2cf2-7783f1c7c175@oss.nttdata.com https://git.postgresql.org/pg/commitdiff/614b7f18b3bda738f352a8732cf749eb5fa56dae

  • 修正 COMMIT AND CHAIN 指令中的錯誤。此提交修正了 COMMIT AND CHAIN 指令,使其即使在要提交的交易中定義了儲存點,也能立即啟動新的交易。先前,COMMIT AND CHAIN 指令在這種情況下沒有執行,因為 commit 280a408b48 忘記讓 CommitTransactionCommand() 處理交易鏈,當交易狀態為 TBLOCK_SUBCOMMIT 時。此外,此提交還為定義儲存點時的 COMMIT AND CHAIN 指令添加了迴歸測試。回溯修補到 v12,即新增交易鏈的版本。報告者:Arthur Nascimento 作者:Fujii Masao 審閱者:Arthur Nascimento, Vik Fearing 討論:https://postgr.es/m/16867-3475744069228158@postgresql.org https://git.postgresql.org/pg/commitdiff/8a55cb5ba9655ffb1cf0a3042aaa6f5eef8c5a85

  • 修正 psql 的 ON_ERROR_ROLLBACK,使其處理 COMMIT AND CHAIN。當啟用 ON_ERROR_ROLLBACK 時,psql 在執行查詢後,如果在有效的交易區塊中處於閒置狀態,則會釋放一個臨時儲存點。但是,psql 在執行 RELEASE 或 ROLLBACK 後不會這樣做,因為在這種情況下臨時儲存點已經被銷毀。此提交更改 psql 的 ON_ERROR_ROLLBACK,使其在執行 COMMIT AND CHAIN 時也不會釋放臨時儲存點。在這種情況下,不需要釋放臨時儲存點,因為 COMMIT AND CHAIN 也會銷毀在要提交的交易中定義的任何儲存點。否則,psql 會嘗試釋放 COMMIT AND CHAIN 已經銷毀的儲存點,並導致錯誤「ERROR: savepoint "pg_psql_temporary_savepoint" does not exist」。回溯修補到 v12,即新增交易鏈的版本。報告者:Arthur Nascimento 作者:Arthur Nascimento 審閱者:Fujii Masao, Vik Fearing 討論:https://postgr.es/m/16867-3475744069228158@postgresql.org https://git.postgresql.org/pg/commitdiff/fe06819f105ccea52c12d418c8dbaaaa54377e96

Heikki Linnakangas 推送了

  • 讓 ExecGetInsertedCols() 及其友善函式更穩健,並改進註解。如果使用不在範圍表且不是分割區路由目標的 ResultRelInfo 呼叫 ExecGetInsertedCols()、ExecGetUpdatedCols() 或 ExecGetExtraUpdatedCols(),則這些函式將會對 NULL 指標(relinfo->ri_RootResultRelInfo)進行解引用。當在未直接修改的表中觸發 RI 觸發器時,會建立此類 ResultRelInfo。這些函式的目前呼叫者都不會傳遞此類關係,因此這不是一個實際存在的錯誤,但讓我們讓它們更穩健。同時,更新 ResultRelInfo 中的註解;在 commit 6214e2b228 之後,為分割區元組路由建立的 ResultRelInfo 的 ri_RangeTableIndex 為零。由 Coverity 注意到。回溯修補到 v11,如 commit 6214e2b228。審閱者:Tom Lane, Amit Langote https://git.postgresql.org/pg/commitdiff/54e51dcde03e5c746e8de6243c69fafdc8d0ec7a

Andres Freund 推送了

Peter Eisentraut 推送了

Magnus Hagander 推送了

Tomáš Vondra 推送了

待定修補程式

Justin Pryzby 提交了一個修補程式,用於移除 REINDEX (CONCURRENTLY, TABLESPACE ..) 實作中的一些無效程式碼。

Masahiro Ikeda 提交了另一個修訂版的修補程式,用於新增與寫入/同步 WAL 記錄相關的統計資訊,並使 WAL 接收器報告 WAL 統計資訊。

Michaël Paquier 提交了另一個修訂版的修補程式,用於重構 HMAC 實作。

Daniel Gustafsson 提交了另一個修訂版的修補程式,用於支援在運作中的叢集中啟用/停用校驗和。

Tomáš Vondra 提交了另一個修訂版的修補程式,用於實作 BRIN 多範圍索引。

Peter Eisentraut 提交了另一個修訂版的修補程式,透過增強錯誤訊息 "每個雜湊分割區模數必須是下一個較大模數的因數"(並顯示相關數字的詳細訊息)來改善新的雜湊分割區邊界檢查錯誤訊息。

Andrey Borodin 提交了另一個修訂版的修補程式,使所有 SLRU 緩衝區大小可配置。

Justin Pryzby 提交了另一個修訂版的修補程式,允許在分割資料表上使用 CREATE INDEX CONCURRENTLY。

Takayuki Tsunakawa 提交了另外兩個修訂版的修補程式,透過新增和使用 COPY 常式到 FDW API 來加速 COPY FROM 到具有遠端分割區的資料表。

Peter Eisentraut 提交了一個修補程式,用於從用戶端設定 SSL 連線的 SNI。

Mark Rofail 和 Joel Jacobson 交換了修補程式,以實作外部鍵陣列。

Bharath Rupireddy 提交了另外兩個修訂版的修補程式,以實作 ALTER SUBSCRIPTION ... DROP PUBLICATION。

Peter Smith 提交了另外三個修訂版的修補程式,以實作兩階段交易的邏輯解碼。

Peter Geoghegan 提交了另外兩個修訂版的修補程式,對 nbtree 頁面刪除使用完整的 64 位元 XID,回收在同一個 VACUUM 期間刪除的頁面,並在 VACUUM VERBOSE 輸出中顯示 "新刪除的頁面"。

Amit Langote 提交了另外兩個修訂版的修補程式,以確保在分割資料表上建立外部鍵觸發器,並在跨分割區更新期間正確強制執行外部鍵約束。

Greg Nancarrow 和 Amit Langote 交換了修補程式,以使平行執行 INSERT ... SELECT ... 成為可能。

Seamus Abshere 和 Amit Langote 交換了修補程式,以允許在分割資料表上設定 parallel_workers。

Michaël Paquier 提交了一個修補程式,用於為沒有儲存體的關聯新增 no_storage、fallback table AM。

Tomáš Vondra 和 Matthias van de Meent 交換了修補程式,以擴充 COPY 進度報告。

Amit Langote 提交了另一個修訂版的修補程式,使繼承樹上的更新和刪除能夠更好地擴展。

Pavel Stěhule 提交了另一個修訂版的修補程式,以實作 schema 變數。

Pavel Stěhule 提交了另一個修訂版的修補程式,以使從檔案讀取 pg_dump 選項成為可能。

Paul Martinez 提交了一個修補程式,用於記錄 max_replication_slots 在訂閱者端的影響。

Amit Langote 提交了另外三個修訂版的修補程式,以修正元組路由,使其僅針對插入操作初始化批次處理。

Andy Fan 提交了另外兩個修訂版的修補程式,在 RelOptInfo 中引入 notnullattrs 欄位,以指示目前查詢中哪些屬性不是 NULL。

Yugo Nagata 提交了另一個修訂版的修補程式,以實作具體化檢視表的增量維護。

David Rowley 提交了另外兩個修訂版的修補程式,新增 TID 範圍掃描以支援有效掃描 TID 範圍。

Kyotaro HORIGUCHI 提交了兩個修訂版的修補程式,旨在透過更正實際允許的關聯類型集合來修正一個錯誤,該錯誤表現為 ALTER TABLE 的某些調用中的錯誤。

Justin Pryzby 和 Michaël Paquier 交換了修補程式,以實作分割資料表上 CREATE INDEX 的進度報告。

Amit Kapila 提交了另外三個修訂版的修補程式,以區分身份驗證失敗時的實體和邏輯複製連線。

John Naylor 提交了另外四個修訂版的修補程式,以使用 SIMD 指令驗證 UTF-8。

Vik Fearing 提交了三個修訂版的修補程式,以實作 SQL 標準 TRIM_ARRAY,它會從陣列中移除最後的元素。

David Rowley 和 Andy Fan 交換了修補程式,允許 estimate_num_groups() 傳回關於估計的更多詳細資訊,允許 simplehash.h 的使用者執行直接刪除,新增一個 Result Cache 執行器節點,並移除 nodeResultCache.c 中的一些程式碼重複。

Justin Pryzby 和 Dilip Kumar 交換了修補程式,以新增自定義資料表壓縮方法。

Takashi Menjo 提交了另一個修訂版的修補程式,以使使用持久性記憶體進行 WAL 操作成為可能。

Mark Dilger 提交了另一個修訂版的修補程式,以新增 heapcheck contrib 擴充功能。

Thomas Munro 提交了另外兩個修訂版的修補程式,透過修正排序規則提供者的處理方式,來修正一個錯誤,該錯誤表現為 pg_collation_actual_version() ERROR: cache lookup failed for collation 123。

Kyotaro HORIGUCHI 提交了另一個修訂版的修補程式,以使除了 CRL 檔案之外,還可以指定 CRL 目錄。

Daniel Gustafsson 提交了另一個修訂版的修補程式,以使將 NSS 用作 libpq 的 TLS 後端成為可能。

Álvaro Herrera 提交了另一個修訂版的修補程式,以在 libpq 中實作批次/管線支援。

Bharath Rupireddy 提交了另一個修訂版的修補程式,以新增用於多個和單個插入的資料表 AM,然後將其用於 CTAS、REFRESH MATERIALIZED VIEW 和 COPY。

Tomáš Vondra 提交了另一個修訂版的修補程式,以實作表達式上的擴充統計資訊。

Hou Zhijie 提交了另一個修訂版的修補程式,新增一個新的 GUC,enable_parallel_dml(布林值,預設為 false)和一個新的資料表選項,parallel_dml_enabled(布林值,預設為 true)。每個都做他們說的事情。

Thomas Munro 提交了一個修補程式,新增 sort_template.h 以製作快速排序函式。

Amit Langote 提交了一個修補程式,允許在跨分割區更新期間進行插入的批次處理。

Daniel Gustafsson 提交了一個修補程式,禁止 SSL 壓縮,因為它使密碼分析攻擊更容易發動。

Peter Eisentraut 提交了另一個修訂版的修補程式,透過新增 LSN_FORMAT_ARGS 巨集以用於 printf 樣式的 LSN 列印,來簡化 LSN 的列印。

Konstantin Knizhnik 提交了另一個修訂版的修補程式,以修正儲存程序與 TOAST 資料存取之間的不協調性。

Jan Wieck 提交了一個修補程式,新增一個線路協定掛鉤和一個範例實作,telnet。

Guillaume Lelarge 提交了另一個修訂版的修補程式,為 pg_dump 新增一個 --extension (-e) 選項,該選項指定要傾印的擴充功能。它可以使用 0 次或多次。

Nathan Bossart 提交了另一個修訂版的修補程式,避免過早建立歸檔狀態 ".ready" 檔案,並透過崩潰追蹤已通知可歸檔的位置。

Nathan Bossart 提交了另一個修訂版的修補程式,以闡明在依使用者、依資料庫或透過命令列選項設定 "role" 時,RESET ROLE 行為的文檔,並為 "role" 和 "session_authorization" 新增組態參數條目。

Paul Guo 提交了另一個修訂版的修補程式,透過僅 fsync() 受影響的檔案/目錄,並使用 copy_file_range() 進行檔案複製,來加速 pg_rewind。

Michaël Paquier 再次提交了一個補丁的修訂版,以實作 OpenSSL <= 1.0.2 缺少的鎖定函數。

Iwata Aya 再次提交了一個補丁的修訂版,以將追蹤功能加入 libpq。

Andres Freund 再次提交了一個補丁的修訂版,以使用全域屏障實作 wal prohibit 狀態,在 WAL 寫入的 START_CRIT_SECTION 之前發出 Error 或 Assert,並透過 README 文件記錄這些對 transam 和 page 的影響。

Georgios Kokolatos 再次提交了一個補丁的修訂版,以使 dbsize 更加一致。

Denis Smirnov 再次提交了兩個補丁的修訂版,以允許可變大小的區塊,使 analyze AM 更具彈性。

Paul Guo 提交了兩個補丁的修訂版,以在 CTAS 期間凍結元組,這可以避免不必要的清理 (vacuum)。

Andy Fan 再次提交了兩個補丁的修訂版,以使一些靜態函數成為 extern,並擴展 ChangeVarNodes,使其可以變更 var->attno,並建立一些隱含的 pruning quals,以擴展規劃時間分割區修剪 (planning time partition pruning) 和初始化分割區修剪 (init partition pruning) 的用例。

Marcus Wanner 提交了兩個補丁的修訂版,以將空的 prepares 呈現給輸出插件。

Ajin Cherian 和 Marcus Wanner 交換了補丁,以在邏輯解碼中保留 PREPARE 與 COMMIT 的順序。

Andrew Dunstan 再次提交了一個補丁的修訂版,以透過讓 make 檔案和 msvc 建置系統建立一個包含錯誤發生時搜尋日誌檔位置的知名檔案,來協助追蹤 cfbot 失敗。

Andy Fan 提交了一個補丁,在 RelOptInfo 中引入 notnullattrs 欄位,以指示目前查詢中哪些 attrs 不是 null,並為單一 rel 新增具有 EquivalenceClass 的 UniqueKey。

Thomas Munro 根據 Andrew Gierth 的建議提交了一個補丁,以移除 effective_io_concurrency 描述中對 spindles 的過時引用。

Bharath Rupireddy 提交了一個補丁,以一次更新多個進度參數。

Vik Fearing 提交了兩個補丁的修訂版,以根據標準實作 GROUP BY DISTINCT。

Vik Fearing 提交了一個補丁,將目錄版本新增到 pg_config,以及一個新的 catalog_version guc,可從 SQL 存取。