PostgreSQL 每週新聞 - 2020 年 11 月 8 日

發表於 2020-11-09,作者:PWN
PWN

PostgreSQL 每週新聞 - 2020 年 11 月 8 日

恭喜 Andres Freund 和 Jonathan Katz 成為新的核心團隊成員!https://postgres.tw/developer/core/

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

PostgreSQL 產品新聞

phpPgAdmin 7.13.1 已發布,這是一個用於 PostgreSQL 的基於 Web 的管理工具。https://xzilla.net//blog/2020/Nov/phpPgAdmin-7-13-1-released.html

Ajqvue 3.3 版已發布,這是一個支持 PostgreSQL 的基於 Java 的 UI。http://ajqvue.com

pg_statement_rollback 已發布,這是一個在語句級別添加具有回滾的伺服器端事務的擴展。https://github.com/lzlabs/pg_statement_rollback/releases/

11 月 PostgreSQL 工作

http://archives.postgresql.org/pgsql-jobs/2020-11/

PostgreSQL 新聞

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

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

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

已應用的補丁

Tom Lane 推送了

  • 修復 TOAST 解壓縮中的兩個問題。 pglz_maximum_compressed_size() 可能低估了產生 N 位元組的解壓縮資料所需的壓縮資料量;這是提交 11a078cf8 中的錯誤。與此同時,pglz_decompress() 未能保護自己免受損壞的壓縮資料的影響,特別是匹配標籤中的 off == 0。提交 c60e520f6 將這種情況變成了無限迴圈,而以前只會導致垃圾輸出。這兩個錯誤的結合似乎可以解釋 Tom Vijlbrief 的錯誤 #16694,儘管如果不直接檢查失敗的會話,就無法完全確定。(需要假設 pglz_maximum_compressed_size() 錯誤導致我們無法取得匹配標籤的第二個位元組,並且那裡碰巧是一個零。如果沒有 off == 0,則很難解釋所報告的無限迴圈。)除了修復這些錯誤之外,還重寫了相關註釋以提高清晰度。反向移植到這兩個提交都已落地的 v13。討論:https://postgr.es/m/16694-f107871e499ec114@postgresql.org https://git.postgresql.org/pg/commitdiff/dfc797730fc7a07c0e6bd636ad1a564aecab3161

  • 關於 TOAST 解壓縮的重新思考。在檢測到損壞的匹配標籤時,pglz_decompress() 應直接傳回 -1。像我在 dfc797730 中所做的那樣跳出迴圈,並不能完全保證會發生這種情況。此外,我們可以在該檢查中使用 unlikely(),以防萬一它有幫助。像之前的補丁一樣,反向移植到 v13。https://git.postgresql.org/pg/commitdiff/fd2997565c6f66837440dd57f5e52b56aa964d14

  • 重新思考 fmgroids.h 巨集的產生規則。傳統上,pg_proc OID 的 fmgroids.h 巨集的名稱是從 prosrc 欄位建構的。但有時相同的 C 函數是多個 pg_proc 條目的基礎,迫使我們任意選擇要參考的 OID;然後無法透過 fmgroids.h 命名其他條目。此外,對於非 C 程式碼函數的 pg_proc 條目,我們可能根本沒有巨集。而是使用 proname 欄位,如果 proname 不是唯一的,則附加 proargtypes 欄位(將引數間的空格替換為底線)。特殊處理 F_OIDEQ 等唯一條目消除了更改大量程式碼的需求。實際上,我只能在樹中找到兩個需要調整的地方;雖然這會更改 fmgroids.h 中相當多的現有條目,但很少有條目是從 C 程式碼中引用的。使用此補丁,pg_proc.dat 中的所有條目在 fmgroids.h 中都有巨集。討論:https://postgr.es/m/472274.1604258384@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/8e1f37c07aafd4bb7aa6e1e1982010af11f8b5c7

  • 刪除對 pg_rewrite.ev_qual 和 ev_action 為 NULL 的特殊檢查。 make_ruledef() 和 make_viewdef() 的程式碼旨在處理這些欄位可能為 null 的情況,但它們已標記為 BKI_FORCE_NOT_NULL 一段時間。因此,實際上不需要做比我們對 pg_rewrite 的其他欄位所做的事情更多的事情,也就是說,只需斷言我們得到了非 null 結果。(有一種觀點認為斷言不是檢查損壞資料的方法,但如果我們想要這樣的策略,那麼這裡肯定不是開始的地方。)此外,刪除 make_ruledef() 中長期存在的(如果確實不是從未存在過的)對空操作清單的處理。這是一個錯誤案例,應視為如此。(DO INSTEAD NOTHING 由 CMD_NOTHING Query 表示,而不是空清單;參見 transformRuleStmt。)Kyotaro Horiguchi,我的一些變更討論:https://postgr.es/m/CAEudQApoA=tMTic6xEPYP_hsNZ8XtToVThK_0x7D_aFQYowq3w@mail.gmail.com https://git.postgresql.org/pg/commitdiff/e1339bfc7a2fd4629e1c3f8f919ddd05b4745e13

  • 修復 pg_hba_file_rules 檢視中 getnameinfo() 的不可移植使用。 fill_hba_line() 以為它可以傳遞 sizeof(struct sockaddr_storage),而不是之前由 getaddrinfo() 傳回的實際 addrlen。雖然這似乎在許多平台上有效,但在 FreeBSD 11 上無效:您會收到失敗,這導致檢視在所有列中為位址和網路遮罩欄位顯示 NULL。getnameinfo() 的 POSIX 規範在這裡非常明確地站在 FreeBSD 這一邊:您應該傳遞實際的位址長度。因此,似乎可能存在此程式碼也失敗的其他平台,而我們只是沒有注意到。此外,我認為 getnameinfo() 失敗導致 NULL 輸出本身就非常虛假。我們的 pg_getnameinfo_all() 包裝函式小心地在失敗時發出「???」,我們應該在這種情況下使用它。NULL 僅應在沒有 IP 位址的列中發出。根據 Peter Vandivier 的錯誤 #16695。反向移植到添加此程式碼的 v10。討論:https://postgr.es/m/16695-a665558e2f630be7@postgresql.org https://git.postgresql.org/pg/commitdiff/0a4b34031279d938c2e59df8df7159d6c11e39b5

  • 允許具有 BYPASSRLS 的使用者變更自己的密碼。提交 491c029db 中的意圖是要求超級使用者變更 BYPASSRLS 屬性,但 AlterRole() 中程式碼的實際效果是要求超級使用者變更關於 BYPASSRLS 角色的所有內容。BYPASSRLS 角色的其他屬性應在與普通角色相同的規則下可變更。修復該問題,並注意與 BYPASSRLS 和 REPLICATION 角色屬性相關的一些文件遺漏。Tom Lane 和 Stephen Frost,根據 Wolfgang Walther 的錯誤報告。反向移植到所有受支援的分支。討論:https://postgr.es/m/a5548a9f-89ee-3167-129d-162b5985fcf8@technowledgy.de https://git.postgresql.org/pg/commitdiff/d907bd0543aa63e59653d7345840bed0f8b3a83b

  • 改進有關 REPLICATION 和 BYPASSRLS 屬性的錯誤訊息。根據 Wolfgang Walther 的建議,釐清措辭。不進行回溯修補;因為這似乎不值得在後續分支中修改可翻譯的字串。Tom Lane 和 Stephen Frost 的討論:https://postgr.es/m/a5548a9f-89ee-3167-129d-162b5985fcf8@technowledgy.de https://git.postgresql.org/pg/commitdiff/17fb60387ce3fdc2bbb13d9b67bed0e4da77e173

  • 防止未初始化的子計畫導致核心傾印。如果規劃器錯誤地將非並行安全的 SubPlan 放入查詢樹的並行化部分,nodeSubplan.c 將在 worker 處理程序中失敗,因為它在 es_subplanstates 中找到一個 null 值,並且無法處理。似乎值得進行測試和 elog,使其成為錯誤案例,而不是核心傾印案例。這可能應該包含在 commit 16ebab688 中,該 commit 負責允許 null 出現在 es_subplanstates 中。因此,回溯修補到 v10,因為那是它引入的地方。討論:https://postgr.es/m/924226.1604422326@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/92f87182f2c617fd420832972b6d0ae4527301c8

  • 從 fmgrtab.c 中移除 aggregate 函數的無用條目。Gen_fmgrtab.pl 將 aggregate 函數視為與其他內建函數相同,這是浪費的,因為實際上沒有必要在 fmgr_builtins[] 表中為它們建立條目。抑制這些條目可以在我的機器上節省大約 3KB 的編譯表空間;雖然不多,但考慮到該表相當「熱門」,這也不是沒有意義的。唯一需要的外部程式碼變更是 ExecInitWindowAgg() 不能在普通 aggregate 函數上呼叫 fmgr_info_cxt()。但這樣做無論如何都能節省一些週期。完成此操作後,aggregate_dummy() 函數將不再被引用,因此可以將其刪除。現在,將 "aggregate_dummy" 用作 aggregate 的 prosrc 值只是一種文件慣例,而不是重要的東西。有人討論過使用 NULL 來節省 pg_proc 中的幾個位元組,但我們必須移除 prosrc 的 BKI_FORCE_NOT_NULL 標記,這似乎不是一個好主意。無論如何,可能有一些客戶端程式碼期望在那裡看到 "aggregate_dummy",所以我不太願意在沒有強烈理由的情況下更改它。討論:https://postgr.es/m/533989.1604263665@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/f21636e5d5b8394ed076e18ddc5f4ba710c69c99

  • 提高我們重述 SQL 語法函數呼叫的能力。SQL 規範針對某些函數呼叫定義了非標準語法,例如,具有數字位置資訊的 substring() 應該拼寫為 "SUBSTRING(string FROM start FOR count)"。我們接受了許多這些東西,但到目前為止不會以相同的格式列印它們,而是簡化為 "substring"(string, start, count)。這長期以來一直讓我感到煩惱,因為它會產生互操作性問題:我們隨意地將 Postgres 特定的語法注入到可能完全符合規範的視圖定義中。然而,現在解決這個問題的真正原因是為了支援計劃對 EXTRACT()(又名 date_part())的語義進行更改。當我們將其切換為返回數字時,我們將讓解析器將 EXTRACT() 翻譯為一些新的函數名稱(如果你問我,不妨是 "extract"),然後教 ruleutils.c 按照 SQL 規範反向列出它。透過這種方式,現有對 date_part() 的呼叫將繼續具有舊的語義。為了實現這一點,發明一個新的 CoercionForm 值 COERCE_SQL_SYNTAX,並讓解析器在輸入具有 SQL 規範裝飾時插入它,而不是 COERCE_EXPLICIT_CALL。(但如果輸入具有普通函數呼叫的形式,則繼續將其標記為 COERCE_EXPLICIT_CALL,即使它呼叫的是其中一個函數。)然後 ruleutils.c 將 COERCE_SQL_SYNTAX 識別為發出 SQL 呼叫語法的提示。它可以使用有關可以這種方式呼叫的函數的硬編碼知識來知道要發出哪種裝飾。(雖然這個解決方案在沒有手動新增的情況下是不可擴展的,但語法也不是,所以這似乎並非無法維護。)請注意,此解決方案僅在函數呼叫以這種方式輸入時才會反向列出具有 SQL 裝飾的函數呼叫;因此,dump-and-reload 本身不會導致視圖外觀發生任何變化。這需要在 struct FuncCall 中新增一個 CoercionForm 欄位。(我不禁稍微重新排列了該 struct 的欄位順序。)FuncCall 不會出現在儲存的規則中,因此該變更不是 catversion 升級的原因,但我無論如何都做了一個,因為 CoercionForm 欄位的新 enum 值可能會混淆舊的後端程式碼。可能的未來工作: * 或許現在應該將 CoercionForm 重新命名為 DisplayForm 或類似的名稱,以反映其更一般的含義。這需要觸及數百個地方,因此不確定是否值得進行程式碼修改。 * SQLValueFunction 節點類型,其發明部分原因是為了提高視圖輸出的 SQL 相容性,或許可以用標記有 COERCE_SQL_SYNTAX 的常規函數呼叫來代替。但不清楚這是否會節省淨程式碼。討論:https://postgr.es/m/42b73d2d-da12-ba9f-570a-420e0cce19d9@phystech.edu https://git.postgresql.org/pg/commitdiff/40c24bfef92530bd846e111c1742c2a54441c62c

  • 使用 anycompatible 而不是 anyelement 宣告 lead() 和 lag()。這允許使用不完全匹配資料欄位類型的 "預設" 表達式。以前你會得到類似 "function lag(numeric, integer, integer) does not exist" 的東西,這不僅沒有幫助,而且還具有誤導性。SQL 規範建議應將預設值強制轉換為資料欄位的類型,但此實作選擇了常見的超類型,這似乎至少同樣合理。(注意:我藉此機會在 pg_proc.dat 上執行了 "make reformat-dat-files",因此此 commit 包含對最近新增的條目的一些外觀上的變更,這些變更與 lead/lag 無關。)Vik Fearing 討論:https://postgr.es/m/77675130-89da-dab1-51dd-492c93dcf5d1@postgresfriends.org https://git.postgresql.org/pg/commitdiff/5c292e6b90433c760a3e15027646c7b94afd0cdd

  • 使用 anycompatible 而不是 anyelement 宣告各種陣列函數。將 array_append、array_prepend、array_cat、array_position、array_positions、array_remove、array_replace 和 width_bucket 轉換為使用 anycompatiblearray。這是 commit 5c292e6b9 的一個簡單擴展,以涵蓋其他一些透過這樣做可以顯著提高可用性的地方。理想情況下,我們還會修改其他接受多個舊式多型引數的函數。但是,其餘的大部分都與一個或多個運算子類別相關聯,使得任何此類變更都比我現在想要打開的更大的麻煩。討論:https://postgr.es/m/77675130-89da-dab1-51dd-492c93dcf5d1@postgresfriends.org https://git.postgresql.org/pg/commitdiff/9e38c2bb5093ceb0c04d6315ccd8975bd17add66

  • 修正浮點數除法中除數為無窮大時的下溢錯誤。float4_div 和 float8_div 在零除以無窮大時能正確產生零,但對於非零有限值除以無窮大時會引發下溢錯誤。這似乎不正確;至少與最近為數值無窮大實現的行為不一致。移除該錯誤,並允許返回零。此修補程式還移除了這些函數中溢位檢查中無用的 isinf() 測試 (非 Inf 除以 Inf 不會產生 Inf)。從更大的修補程式中提取;這在幾何運算符的上下文中似乎很重要,因此它值得單獨提交。Kyotaro Horiguchi 討論:https://postgr.es/m/CAGf+fX70rWFOk5cd00uMfa__0yP+vtQg5ck7c2Onb-Yczp0URA@mail.gmail.com https://git.postgresql.org/pg/commitdiff/fac83dbd6fe1ac3d4125bfa39f287f95bffe6cda

  • 不要對自引用視圖上的 LOCK TABLE 拋出錯誤。自從我們在 v11 中使其遞迴到視圖中以來,LOCK TABLE 一直抱怨應用於自引用視圖時的「無限遞迴」。然而,這破壞了 pg_dump 的新假設,即鎖定每個關係是可以的。似乎沒有任何充分的理由拋出錯誤:如果我們只是放棄遞迴,我們仍然滿足了鎖定每個引用關係的要求。依照 Andrew Bille(透過 Alexander Lakhin)提出的錯誤 #16703。討論:https://postgr.es/m/16703-e348f58aab3cf6cc@postgresql.org https://git.postgresql.org/pg/commitdiff/5b7bfc39726ff9f6c52dd73e337c34e74e0d1f39

  • 還原「pg_dump: 鎖定所有關係,而不僅僅是普通表」。在所有分支中還原 403a3d91c 以及後續修正 7f4235032。我們需要更仔細地思考 LOCK TABLE 在視圖上的行為,並且在下週發布之前沒有時間這樣做。我們稍後再試一次。討論:https://postgr.es/m/16703-e348f58aab3cf6cc@postgresql.org https://git.postgresql.org/pg/commitdiff/d3adaabaf7d555ec8bb1d83c43f72e79f1bf0b7d

  • 還原「在 LOCK TABLE 中接受任何種類的關係」。在所有分支中還原 59ab4ac32 以及後續修正 33862cb9c。我們需要更仔細地思考 LOCK TABLE 在視圖上的行為,並且在下週發布之前沒有時間這樣做。我們稍後再試一次。討論:https://postgr.es/m/16703-e348f58aab3cf6cc@postgresql.org https://git.postgresql.org/pg/commitdiff/eeda7f6338095701cfe1ba3da37070508efe019e

  • 修正 ecpg 對 B'...' 和 X'...' 字面值的處理錯誤。這些在多個方面都已損壞:* xbstart 和 xhstart 詞法分析器動作在轉換到 xb/xh 狀態之前,忽略了設定 "state_before_str_start",因此可能導致稍後出現「internal error: unreachable state」。* 在 xb 狀態結束時對有效字串內容的測試完全錯誤,因為它錯誤地考慮了 xbstart 動作注入的 "b" 前綴。同時,xh 狀態根本沒有這樣的檢查。* 產生的字面值未能包含任何引號。* 語法無論如何都做了錯誤的事情,通常忽略字面值並發出其他東西,因為 BCONST 和 XCONST 令牌的處理方式與 SCONST 令牌隨機不同。第一個問題顯然是 commit 7f380c59f 中的疏忽,但其他問題似乎非常古老。缺乏投訴表明 ECPG 用戶沒有太多使用這些語法(雖然我確實模糊地記得之前的投訴)。按照書面形式,此修補程式依賴於 7f380c59f,因此它不能追溯到 v13 之前。考慮到投訴的短缺,我對將修補程式調整到先前的分支不感興趣。Shenhao Wang 報告和修補程式(測試案例由我調整)討論:https://postgr.es/m/d6402f1bacb74ecba22ef715dbba17fd@G08CNEXMBPEKD06.g08.fujitsu.local https://git.postgresql.org/pg/commitdiff/1e3868ab3bef5cfa0f4d44a6937a880be7a3a482

  • 避免在新 ecpg 測試案例中重複使用輸出變數。buildfarm 認為這會導致記憶體踩踏,雖然令人煩惱的是我無法在此處複製它。strings.pgc 中的現有程式碼正在做一些似乎根本沒有受到文件批准的事情,但我現在不傾向於讓它變得更好。讓我們只宣告更多的輸出變數,以期解決它。https://git.postgresql.org/pg/commitdiff/eed4356fad84b0fd6e3caa49c7006f401159ac9a

David Rowley 推送

  • 允許在巢狀的 Append/MergeAppend 節點上執行執行期修剪 (run-time pruning)。 之前,我們只在所需的資訊上加上標籤,以允許執行器對屬於基本關係的 Append/MergeAppend 節點執行執行期分割區修剪。 我們認為巢狀的 Append/MergeAppend 節點幾乎總是會被拉到頂層的 Append/MergeAppend 中,並且為任何子 Append/MergeAppend 節點建立執行期修剪資訊是浪費時間。 然而,這可能考慮不周。 我們無法拉起巢狀 Append/MergeAppend 的一些例子包括: 1) 平行 Append 節點,其中包含混合了平行和非平行路徑的平行 Append。 2) 當規劃一個已排序的 Append 掃描時,一個未排序的子分割區可能需要一個巢狀的 MergeAppend 路徑,以確保子分割區不會混淆被餵入頂層 Append 的元組的順序。 不幸的是,移除 createplan.c 中那些刻意不為 RELOPT_BASEREL 關係以外的任何東西建立執行期修剪資訊的程式碼行並不像想像中那麼簡單。 add_paths_to_append_rel() 中的程式碼對於它所包含的 Append/MergeAppend 路徑的 partitioned_rels 來說太過草率。 原始碼總會假設 accumulate_append_subpath() 會將每個子 Append 和子 MergeAppend 路徑拉到頂層路徑中。 雖然記錄額外的分割資料表 RT 索引似乎沒有造成任何實際錯誤,但這確實意味著在稍後的規劃中,當我們建立執行期修剪資訊時,我們浪費了精力,並為執行器沒有子路徑來執行執行期修剪的分割資料表建立了 PartitionedRelPruneInfos。 在這裡,我們收緊了它,以便 partitioned_rels 只包含實際在給定的 Append/MergeAppend 中具有子路徑的分割資料表的 RT 索引。 我們現在可以斷言每個 PartitionedRelPruneInfo 都有一個非空的 present_parts。 這應該允許我們捕獲任何被遺漏的奇怪邊緣情況。 順帶一提,AppendPath 和 MergeAppendPath 的 partitioned_rel 欄位不再有充分的理由使用 IntList 的 List。 我們可以簡單地使用 Relids 的 List 來代替。 這樣在記憶體中更緊湊,並且新增新成員的速度更快。 我們仍然知道哪個是根層級分割區,因為它們的 relid 總是比它們的子分割區低。 以前,這個欄位用於更多的事情,但是執行期分割區修剪現在仍然是它唯一的用戶,並且它不需要 IntLists 的 List。 在這裡,我們也擺脫了 RelOptInfo 的 partitioned_child_rels 欄位。 這是之前用於(有時不正確地)設定 Append/MergeAppend 路徑的 partitioned_rels 欄位的東西。 這是該欄位的唯一用法,所以我們可以很高興地直接移除它。 我也忍不住更改了附近的一些程式碼,以利用新加入的 for_each_from 巨集,這樣我們就可以跳過清單中的第一個元素,而無需在每次迭代時檢查目前項目是否是第一個。 Andreas Kretschmer 的錯誤報告促使了所有這些工作,但是,經過一些考慮,我個人並不將其歸類為錯誤修復。 因此,沒有回溯修補 (backpatch)。 在 Andreas 的測試案例中,由於頂層 Append 只有一個子路徑,根據 8edd0e794,該子路徑被拉高了一層,因此巢狀 Append 並不明顯。 作者:David Rowley 審閱者:Amit Langote 討論:https://postgr.es/m/flat/CAApHDvqSchs%2BubdybcfFaSPB%2B%2BEA7kqMaoqajtP0GtZvzOOR3g%40mail.gmail.com https://git.postgresql.org/pg/commitdiff/a929e17e5a8c9b751b66002c8a89fdebdacfe194

  • 修正不穩定的 partition_prune 迴歸測試。 這最近被 a929e17e5 破壞了。 我忘記了平行測試應該讓它們的 EXPLAIN 輸出通過 explain_parallel_append 函數,以便在平行工作程序啟動失敗時輸出是穩定的。 fairywren 是第一個注意到的人。 回報者:Michael Paquier 討論:https://postgr.es/m/20201102062951.GB15770@paquier.xyz https://git.postgresql.org/pg/commitdiff/90d8f1b1826ce076a502a43fe7c88423b46c6349

Amit Kapila 推送了

Michaël Paquier 推送了

Heikki Linnakangas 推送

Thomas Munro 推送

Magnus Hagander 推送

Peter Eisentraut 推送

Tomáš Vondra 推送了

Fujii Masao 推送了

Peter Geoghegan 推送了

  • 修正 nbtree cleanup-only VACUUM 統計資料不準確的問題。從 posting list 元組中計算 heap TIDs 的邏輯(由 commit 0d861bbb 新增)存在缺陷。在未設定任何 callback 的情況下,它不會計算任何 TIDs/索引元組。這意味著我們在 clean-up only VACUUM 中錯誤地計算了沒有索引元組,這可能導致受影響的索引中 pg_class.reltuples 錯誤地設定為 0。為了修正這個問題,在沒有 callback 的情況下,回到從頁面計數項目。這種方法不是很準確,但在實踐中效果很好,同時避免了在 clean-up only VACUUM 期間存取每個索引元組的成本。作者:Peter Geoghegan pg [AT] bowt.ie 回報者:Jehan-Guillaume de Rorthais jgdr [AT] dalibo.com https://postgr.es/m/20201023174451.69e358f1@firost Backpatch:13-,即引入 nbtree deduplication 的位置 https://git.postgresql.org/pg/commitdiff/48e1291342dd7771cf8c67aa1d7ec1f394b95dd8

  • 修正 wal_consistency_checking 中 nbtree 的錯誤。wal_consistency_checking 指出在某些涉及 nbtree 頁面刪除的情況下存在不一致。根本問題是,在 REDO 程序運行後產生的頁面映像與原始執行後產生的相應頁面映像之間存在細微差異。 這種無害的不一致性一直存在。 但現在我們或多或少期望即使在已刪除的 nbtree 頁面之間也完全一致,所以這不再可行。 為了修正此問題,調整 REDO 程序以符合原始執行。 這是 commit f47b5e13 中的疏忽。https://git.postgresql.org/pg/commitdiff/efc5dcfd8ad4e1df633025d8a91b64cd44d93f42

  • 改進 nbtree README 的 LP_DEAD 部分。 在 commit 2ed5b87f 之後,關於索引掃描如何設置 LP_DEAD 位元的描述相當不清楚。稍微整理一下。 同時,在本節開頭提及 _bt_check_unique() 中的 LP_DEAD 位元設置。 這種機制實際上可能比該節重點關注的通用 kill_prior_tuple 機制更重要,所以至少值得順帶一提。https://git.postgresql.org/pg/commitdiff/5a2f154a2ecaf545000a3ff3cdbadc76ae1df30a

Álvaro Herrera 發布了。

待處理的補丁

Nikhil Benesch 提交了一個補丁,以支援 split_part() 函數中的負數索引,這些索引從陣列末尾而不是開頭開始計數。

Justin Pryzby 提交了另一個版本的補丁,將 CIC 重構為依賴 REINDEX CONCURRENTLY,重構它以允許一次重新索引所有索引分割區,並使 ReindexPartitions() 設置 indisvalid,以便稍後出現的東西可以看到它們已準備好。

Magnus Hagander 提交了另一個版本的補丁,從 pg_upgrade 中刪除過時的 analyze_new_cluster.sh 腳本和了解它的東西。

Anastasia Lubennikova 提交了另一個版本的補丁,以教導 COPY FREEZE 設置 PD_ALL_VISIBLE 和可見性映射位元。

David G. Johnston 提交了另一個版本的補丁,以闡明信號函數沒有回饋的事實。

Heikki Linnakangas 提交了四個版本的補丁,將 copy.c 分割為 copyto.c 和 copyfrom.c,並進一步將 copyfrom.c 分割為 copyfrom.c 和 copyfromparse.c。 這將使處理拆分檔案中通常獨立的功能更方便且更易於閱讀。

Álvaro Herrera 提交了另一個版本的補丁,以將批次/管線支援添加到 libpq。

Pavel Stěhule 提交了一個補丁,以減少從 PL/pgSQL 以非原子模式執行 CALL 語句的開銷。

Magnus Hagander 提交了兩個版本的補丁,以刪除 postgres 的過時 -O 開關,該開關曾經允許將選項傳遞給每個伺服器進程。

Kyotaro HORIGUCHI 提交了另外兩個版本的補丁,以修復 src/backend/storage/ipc/latch.c 中 NULL 檢查之前的解引用。

David Rowley 提交了兩個版本的補丁,以減少在 Windows 上構建 contrib 模組的特殊案例的數量。

Konstantin Knizhnik 提交了另外三個版本的補丁,以將自定義壓縮添加到 libpq。

Fabien COELHO 提交了另一個版本的補丁,以向 pgbench 添加一個選項,該選項會延遲查詢直到建立連線。

Thomas Munro 和 David Rowley 交換了補丁以實作定序版本控制。

Jinbao Chen 提交了一個補丁,以添加一個新的表 am 'tid_visible' 來測試 tid 的可見性。

Peter Geoghegan 提交了另一個版本的補丁,以將刪除重複資料刪除添加到 nbtree。

Stephen Frost 提交了另外兩個版本的補丁,以使用預先獲取來進行 ANALYZE。

Tomáš Vondra 提交了另一個版本的補丁,以使用 INT64_FORMAT 在排序調試中列印 int64 變數。

Bharath Rupireddy 提交了另一個版本的補丁,以在 Create Table As 中使用多個 Inserts。

Amit Langote 提交了另一個版本的補丁,以從 ExecInitModifyTable 呼叫 BeginDirectModify,並延遲初始化結果關係資訊。 這項工作構建了基礎架構,稍後將用於提高外來表上的寫入效率。

Vigneshwaran C 提交了另外兩個版本的補丁,透過添加日誌訊息以包含 GSS 身份驗證、加密和主體資訊,來改進 GSS 身份驗證/加密連線的連線授權訊息。 此訊息將幫助使用者了解是否使用了 GSS 身份驗證或加密,以及使用了哪個 GSS 主體。

Tomáš Vondra 提交了另外三個版本的補丁,以實作 BRIN 多範圍索引。

Álvaro Herrera 提交了另一個版本的補丁,以實作 ALTER TABLE ... DETACH CONCURRENTLY。

Tsutomu Yamada 提交了另一個版本的補丁,以將 \dX(它列出了擴展統計資訊)添加到 psql。

Pavel Borisov 提交了另外兩個版本的補丁,以棄用並替換點的 <^>^ 運算符。

Melanie Plageman 提交了另一個版本的補丁,以支援並行 FULL JOIN 和 RIGHT JOIN。

Kyotaro HORIGUCHI 提交了另外兩個版本的補丁,以在統計資訊收集器中使用共享記憶體而不是檔案進行儲存。

Ajin Cherian 和 Peter Smith 交換了補丁以添加兩階段事務的邏輯解碼。

Kirk Jamison 提交了另一個版本的補丁,透過避免在關係足夠小,或者要失效的區塊總數低於完整掃描的閾值時掃描整個緩衝池,使 DropRelFileNodeBuffers() 在恢復期間更有效率。

Daniel Gustafsson 提交了另外兩個版本的補丁,以支援 NSS 作為 libpq 的 TLS 後端。

Takamichi Osumi 提交了另外三個版本的補丁,以實作 CREATE OR REPLACE TRIGGER。

Fujii Masao 提交了另一個版本的補丁,以在 autoprewarm 進程中使用標準 SIGHUP 和 SIGTERM 處理程式。

Justin Pryzby 發送了另一個修訂版的 patch,以實作分割資料表的 CLUSTER 功能。 這需要指定用於叢集的分割索引,或者先前已將分割索引設定為叢集。

Kyotaro HORIGUCHI 發送了另一個修訂版的 patch,以修正某些幾何運算子和函數中的 NaN 處理問題。

Michaël Paquier 發送了另一個修訂版的 patch,以重構 SHA2 API、將 sha2_openssl.c 切換為使用 EVP,並使 pgcrypto 使用核心內的資源擁有者機制來處理 EVP。

Yuzuko Hosoya 發送了另一個修訂版的 patch,以修正自動清理 (autovacuum) 和分割資料表之間的一些問題。

Justin Pryzby 發送了另一個修訂版的 patch,使 pg_ls_* 可以顯示目錄和共享檔案集。

Seino Yuki 發送了另一個修訂版的 patch,以允許 pg_stat_statements 追蹤 REFRESH MATERIALIZED VIEW 處理的資料列。

Kyotaro HORIGUCHI 發送了另兩個修訂版的 patch,以實作 CatCache 過期機制。

David Pirotte 發送了另一個修訂版的 patch,以將邏輯解碼訊息新增到 pgoutput。

Masahiko Sawada 發送了另兩個修訂版的 patch,以實作外部交易的交易管理器。

Masahiro Ikeda 發送了另一個修訂版的 patch,以將統計資訊新增到 pg_stat_wal 檢視表中。

Justin Pryzby 發送了一個 patch,該 patch 建立在增量檢視維護 (incremental view maintenance) patch 之上,修正了一些文件問題。

Michaël Paquier 發送了一個 patch,以重構 MD5 實作,使其只有一個版本,並切換為 OpenSSL 使用 EVP。

Justin Pryzby 發送了另一個修訂版的 patch,以闡明最小/最大 IO 的計算,特別是相關性的雙重使用和影響,避免重複使用 "pages_fetched" 變數,並在評估位圖掃描 (bitmap scan) 的成本時,像索引掃描 (index scan) 一樣使用相關性統計資訊。

Sergei Kornilov 發送了另一個修訂版的 patch,以允許使用 reload 變更某些恢復參數。

Marina Polyakova 發送了兩個修訂版的 patch,以修復一個錯誤,該錯誤表現為 pgbench 不再支援 Windows 上的大量客戶端連線。

Andrey Borodin 發送了另一個修訂版的 patch,為 gist_btree 類型的 GiST 建立新增排序支援 (Sortsupport)。

Jürgen Purtz 和 Erik Rijkers 交換了 patch,以將架構章節新增到教學課程中。

Dilip Kumar 發送了另一個修訂版的 patch,以實作自訂資料表壓縮方法。

Tomáš Vondra 發送了一個 patch,以從 brin_memtuple_initialize 中移除一些重複的程式碼。