恭喜 Andres Freund 和 Jonathan Katz 成為新的核心團隊成員!https://postgres.tw/developer/core/
本週人物:https://postgresql.life/post/elein_mustain/
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/
http://archives.postgresql.org/pgsql-jobs/2020-11/
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 推送了
針對頂層邏輯複製訊息類型使用 Enum。 邏輯複製協定使用單一位元組字元來識別邏輯複製協定中的訊息類型。 程式碼針對此目的使用字串文字。 使用 Enum 以便:1. 所有使用的字串文字都可以在單一位置找到。 這使得新增更多類型變得容易,而不會有衝突的風險。 2. 很容易找到處理給定訊息類型的程式碼。 3. 當與 switch 語句一起使用時,使用 -Wswitch 可以很容易地識別遺漏的情況。 作者:Ashutosh Bapat 審閱者:Kyotaro Horiguchi、Andres Freund、Peter Smith 和 Amit Kapila 討論:https://postgr.es/m/CAExHW5uPzQ7L0oAd_ENyvaiYMOPgkrAoJpE+ZY5-obdcVT6NPg@mail.gmail.com https://git.postgresql.org/pg/commitdiff/644f0d7cc9c2cb270746f2024c706554e0fbec82
修正錯字。 作者:Hou Zhijie 討論:https://postgr.es/m/855a9421839d402b8b351d273c89a8f8@G08CNEXMBPEKD05.g08.fujitsu.local https://git.postgresql.org/pg/commitdiff/8c2d8f6cc4848cf9276dff445bb0f2f664083eca
使用 strlcpy 而不是 memcpy 來複製 pgstat.c 中的槽位名稱。 這裡沒有直接的錯誤,但最好與同一檔案中其他地方的用法保持一致。 順帶一提,修正 pgstat_recv_replslot 中一個錯誤的斷言。 作者:Kyotaro Horiguchi 審閱者:Sawada Masahiko 和 Amit Kapila 討論:https://postgr.es/m/20201104.175523.1704166915688949637.horikyota.ntt@gmail.com https://git.postgresql.org/pg/commitdiff/4f841ce3f7f4d429a3a275f82745d63c78cde4b2
Michaël Paquier 推送了
修正註解和文件中的一些文法和錯字。 這些文件修正程式已回溯修補到它們適用的位置。 作者:Justin Pryzby 討論:https://postgr.es/m/20201031020801.GD3080@telsasoft.com 回溯修補至:9.6 https://git.postgresql.org/pg/commitdiff/8a15e735be00f156a7227741c0ce88702e6de099
還原 pg_relation_check_pages()。 根據對 bufmgr.c 中程式碼核心部分的缺乏可移植性以及頁面讀取期間分割區映射鎖定的使用的投訴,這會還原以下一系列提交:c780a7a9 f2b88396 b787d4ce ce7f772c 60a51c6b。 根據與 Andres Freund、Robert Haas 和我自己的討論。 提升目錄版本。 討論:https://postgr.es/m/20201029181729.2nrub47u7yqncsv7@alap3.anarazel.de https://git.postgresql.org/pg/commitdiff/e152506adef4bc503ea7b8ebb4fedc0b8eebda81
修正了新的 Unicode {de,re}composition 程式碼中的小問題。 當比對程式碼點時,資料表產生腳本會錯誤地抱怨重組排序。 這不會導致產生不正確的資料表。 請注意,此條件尚未達到,但可能會在未來的更新中達到。 pg_bswap.h 不需要包含在 frontend.x 中。 作者:John Naylor 討論:https://postgr.es/m/CAFBsxsGWmExpvv=61vtDKCs7+kBbhkwBDL2Ph9CacziFKnV_yw@mail.gmail.com https://git.postgresql.org/pg/commitdiff/ceaeac54f75f0117a7b3caa2f8ecba5cfac18ee5
將 GUC_LIST_INPUT 和 GUC_LIST_QUOTE 新增到 unix_socket_directories。這應該在最初的 commit 中完成,該 commit 將 unix_socket_directories 變成一個列表,如 c9b0cbe。此變更允許正確支援 ALTER SYSTEM 的情況,其中可以將多個路徑指定為列表,例如以下模式,其中對每個項目應用展平:ALTER SYSTEM SET unix_socket_directories = '/path1', '/path2'; postgresql.conf 中指定的任何參數都以相同的方式解析,因此沒有相容性變更。pg_dump 有一個硬編碼的參數列表,標記為 GUC_LIST_QUOTE,它會定期更新。為了清晰起見,這些參數按字母順序重新排列。作者:Ian Lawrence Barwick 審閱人:Peter Eisentraunt, Tom Lane, Michael Paquier 討論:https://postgr.es/m/CAB8KJ=iMOtNY6_sUwV=LQVCJ2zgYHBDyNzVfvE5GN3WQ3v9kQg@mail.gmail.com https://git.postgresql.org/pg/commitdiff/a05dbf477b0ef173adb1ae5d004cbeb0cf400b66
Heikki Linnakangas 推送
doc: 在章節標題中提及 UNION/ORDER BY 等關鍵字。「查詢」章節中的大多數章節和子章節標題都明確地陳述了關鍵字,但「排序行」和「組合行」都沒有。雖然沒有規定必須這樣做,但這似乎是一個好習慣。這些關鍵字會讓即使只有一點 SQL 經驗的人也感到熟悉。David G. Johnston,根據 bilge@scriptfusion.com 的建議 討論:https://postgres.tw/message-id/159981394174.31338.7014519396749859167%40wrigleys.postgresql.org https://git.postgresql.org/pg/commitdiff/8ef2a5afdf8ec9e4c8b28a7042c9508eb6161671
pg_rewind: 將 syncTargetDirectory() 移到 file_ops.c。為了保持一致性。所有其他對目標目錄進行操作的底層函式都在 file_ops.c 中。審閱人:Michael Paquier 討論:https://postgres.tw/message-id/0c5b3783-af52-3ee5-f8fa-6e794061f70d%40iki.fi https://git.postgresql.org/pg/commitdiff/ffb4e27e9c5ea87f9fecb7036dfc7cc1f38169b6
重構 pg_rewind 以便更清楚地做出決策。現在,在收集所有必要的資訊後,確定如何處理每個檔案是一個單獨的步驟。這樣更清楚。以前,決策過程被分在 process_source_file() 和 process_target_file() 之間,很難拼湊出總體的規則是什麼。審閱人:Kyotaro Horiguchi, Soumyadeep Chakraborty 討論:https://postgres.tw/message-id/0c5b3783-af52-3ee5-f8fa-6e794061f70d%40iki.fi https://git.postgresql.org/pg/commitdiff/eb00f1d4bf96bdba236bcc089f3ae94db9b7c603
pg_rewind: 將混合列表+陣列資料結構替換為 simplehash。既然 simplehash 可以在前端程式碼中使用,讓我們利用它。審閱人:Kyotaro Horiguchi, Soumyadeep Chakraborty 討論:https://postgres.tw/message-id/0c5b3783-af52-3ee5-f8fa-6e794061f70d%40iki.fi https://git.postgresql.org/pg/commitdiff/f81e97d0475cd4bc597adc23b665bd84fbf79a0d
pg_rewind: 重構從本地/libpq 來源提取的抽象概念。透過引入一個通用的抽象類別,借用物件導向程式設計術語,來代表可以在來源伺服器上執行的所有操作,這使得「來源」伺服器的抽象概念更加清晰。它有兩種實現,一種是透過 libpq 提取,另一種是從本地目錄提取。這增加了一些程式碼,但更容易理解正在發生的事情。copy_executeFileMap() 和 libpq_executeFileMap() 函式基本上包含相同的邏輯,只是呼叫不同的函式來提取來源檔案。重構,使通用邏輯位於一個地方,在一個名為 perform_rewind() 的新函式中。審閱人:Kyotaro Horiguchi, Soumyadeep Chakraborty 討論:https://postgres.tw/message-id/0c5b3783-af52-3ee5-f8fa-6e794061f70d%40iki.fi https://git.postgresql.org/pg/commitdiff/37d2ff38031262a1778bc76a9c55fff7afbcf275
Thomas Munro 推送
新增 pg_depend.refobjversion。提供一個位置來記錄被參考的資料庫物件的版本。後續的 commit 將使用它來記錄索引的校對版本上的依賴關係,但其他種類物件的類似想法也被提出。作者:Thomas Munro thomas.munro [AT] gmail.com 審閱人:Julien Rouhaud rjuju123 [AT] gmail.com 審閱人:Peter Eisentraut peter.eisentraut [AT] 2ndquadrant.com 討論:https://postgr.es/m/CAEepm%3D0uEQCpfq_%2BLYFBdArCe4Ot98t1aR4eYiYTe%3DyavQygiQ%40mail.gmail.com https://git.postgresql.org/pg/commitdiff/cd6f479e79f3a33ef7a919c6b6c0c498c790f154
移除 pg_collation.collversion。這個模型無法擴展到涵蓋預設校對,並且在版本變更時沒有關於受影響的資料庫物件的任何資訊。移除,以準備後續的 commit,該 commit 將新增一種新的機制。作者:Thomas Munro thomas.munro [AT] gmail.com 審閱人:Julien Rouhaud rjuju123 [AT] gmail.com 審閱人:Peter Eisentraut peter.eisentraut [AT] 2ndquadrant.com 討論:https://postgr.es/m/CAEepm%3D0uEQCpfq_%2BLYFBdArCe4Ot98t1aR4eYiYTe%3DyavQygiQ%40mail.gmail.com https://git.postgresql.org/pg/commitdiff/7d1297df0830725d4434ba7dbf71a9e8221ad49e
追蹤索引的校對版本。在建立或重建索引時,在 pg_depend 中記錄相依校對的當前版本。稍後在存取索引時,如果當前版本不符,則警告索引可能已損壞。感謝 Douglas Doole、Peter Eisentraut、Christoph Berg、Laurenz Albe、Michael Paquier、Robert Haas、Tom Lane 和其他人提供的非常有幫助的討論。作者:Thomas Munro thomas.munro [AT] gmail.com 作者:Julien Rouhaud rjuju123 [AT] gmail.com 審閱人:Peter Eisentraut peter.eisentraut [AT] 2ndquadrant.com (早期版本) 討論:https://postgr.es/m/CAEepm%3D0uEQCpfq_%2BLYFBdArCe4Ot98t1aR4eYiYTe%3DyavQygiQ%40mail.gmail.com https://git.postgresql.org/pg/commitdiff/257836a75585934cc05ed7a80bccf8190d41e056
容忍舊式 Windows 地區設定名稱的版本查詢失敗。接受我們目前無法取得此類地區設定名稱的版本。使用者需要指定較新的語言標籤格式才能啟用校對版本控制功能。目前尚不清楚我們是否可以為了這個目的,可靠地將舊式轉換為新式。不幸的是,這意味著除非您在 initdb 或 CREATE DATABASE 時提供類似 en-US 的內容,否則校對版本控制可能不適用於預設校對(儘管由於尚未理解的原因,它似乎在某些系統上有效)。如果我們採用它,最好找到更好的解決方案,或記錄這個怪癖,但這應該可以解決目前3隻失敗的 build farm 動物。審閱人:David Rowley dgrowleyml [AT] gmail.com 審閱人:Tom Lane tgl [AT] sss.pgh.pa.us 討論:https://postgr.es/m/CAEepm%3D0uEQCpfq_%2BLYFBdArCe4Ot98t1aR4eYiYTe%3DyavQygiQ%40mail.gmail.com https://git.postgresql.org/pg/commitdiff/9f12a3b95dd56c897f1aa3d756d8fb419e84a187
修正解除 SLRU 區段連結的問題。Commit dee663f7 的目的是在解除區段檔案連結之前捨棄任何排隊的 fsync 請求,但遺漏了一個程式碼路徑。修正方式是將忘記和解除連結的程式碼集中到一個函數中。報告者:Tomas Vondra tomas.vondra [AT] 2ndquadrant.com 討論:https://postgr.es/m/20201104013205.icogbi773przyny5%40development https://git.postgresql.org/pg/commitdiff/c732c3f8c122009de373cff9b44b5cf0992ba1bf
修正定序版本查找中的斷言。Commit 257836a7 包含一個斷言,即版本查找例程不會嘗試查找 "C" 或 "POSIX",但使用面向用戶的 SQL 函數 pg_collation_actual_version() 可以到達這種情況。刪除斷言。https://git.postgresql.org/pg/commitdiff/d50e3b1f8d763d51080ca4f6cbaa6818a6472292
Magnus Hagander 推送
闡明 CREATE TABLE 文件中的暫存表格名稱遮蔽。作者:David Johnston https://git.postgresql.org/pg/commitdiff/5b3dca096f8e504b73812f68716fb68dd1176d6d
在 sslinfo 中使用 be_tls_* API 獲取 SSL 資訊。sslinfo 直接將 Port->ssl 成員傳遞給 OpenSSL,以便提取有關連線的資訊。這破壞了後端 TLS 實作提供的 API,並且重複了程式碼,沒有任何好處。重寫以盡可能利用後端 API。作者:Daniel Gustafsson daniel [AT] yesql.se https://git.postgresql.org/pg/commitdiff/5d1833f414973595411779b86e085fb05907a805
改善後端 OpenSSL 實作中的錯誤處理。Commit d94c36a45ab 引入了錯誤處理到 sslinfo,以優雅地處理 OpenSSL 錯誤。這將此錯誤處理移植到後端 TLS 實作。作者:Daniel Gustafsson daniel [AT] yesql.se https://git.postgresql.org/pg/commitdiff/13cfa02f77936895bff6ffabf1fde5d47fd1df07
在測試觸發器中使用非棄用的 TG_TABLE_NAME。Commit 3a9ae3d2068(早在 2006 年)棄用了 TG_RELNAME,轉而使用 TG_TABLE_NAME,但測試案例中的現有用法一直保留到今天。更改為使用 TG_TABLE_NAME(TG_RELNAME 仍然由一個測試案例涵蓋)。https://git.postgresql.org/pg/commitdiff/44a184cb686866b10d63695db344195c239f9374
添加 pg_strong_random_init 函數來初始化隨機數生成器。目前只有 OpenSSL 需要此初始化,但未來其他 SSL 實作也可能需要。將此功能抽象成一個單獨的函數可以使其更乾淨和更清晰,並且還消除了 fork_process.c 中對 OpenSSL 標頭的依賴性。OpenSSL 很特別,即使我們不打算直接使用它,也需要初始化這個隨機數生成器,直到我們放棄對 OpenSSL 1.1.1 之前所有版本的支援。(當然,如果我們實際上使用了它,也是如此)。目前所有其他實作都留空,但預計未來會添加更多。作者:Daniel Gustafsson daniel [AT] yesql.se, Michael Paquier michael [AT] paquier.xyz 審閱者:Magnus Hagander magnus [AT] hagander.net 討論:https://postgr.es/m/F6291C3C-747C-4C93-BCE0-28BB420B1FF5@yesql.se https://git.postgresql.org/pg/commitdiff/5ee180a3947060b98284a935f26f92c71d698f7c
Peter Eisentraut 推送
在適當的地方使用 PG_GETARG_TRANSACTIONID。有些地方使用 PG_GETARG_UINT32,而使用 PG_GETARG_TRANSACTIONID 會更合適。(當然,它們在內部是相同的,因此沒有外部可見的影響。)為此,將 PG_GETARG_TRANSACTIONID 匯出到 xid.c 之外。為了對稱性,我們也匯出 PG_RETURN_TRANSACTIONID,即使目前沒有外部使用者。作者:Ashutosh Bapat ashutosh.bapat [AT] 2ndquadrant.com 討論:https://postgres.tw/message-id/flat/d8f6bdd536df403b9b33816e9f7e0b9d@G08CNEXMBPEKD05.g08.fujitsu.local https://git.postgresql.org/pg/commitdiff/dd26a0ad760b11237d7ea9cda8ccccc1826c2c64
移除在測試中對棄用的 containment 運算子的使用。在 gist 相關的測試中,將 @ 切換為 <@
,將 ~ 切換為 @>
。舊的運算子名稱已被棄用,最終(可能很快)會被移除。作者:Justin Pryzby pryzby [AT] telsasoft.com 討論:https://postgres.tw/message-id/flat/20201027032511.GF9241@telsasoft.com https://git.postgresql.org/pg/commitdiff/3165426e54df02a6199c0a216546e5095e875a0a
移除內建模擬類型棄用的 containment 運算子。移除內建幾何資料類型舊的 containment 運算子 @ 和 ~。這些已被棄用;請改用 <@
和 @>
。(一些 contrib 模組仍然包含相同的棄用運算子。這將單獨處理。)作者:Justin Pryzby pryzby [AT] telsasoft.com 討論:https://postgres.tw/message-id/flat/20201027032511.GF9241@telsasoft.com https://git.postgresql.org/pg/commitdiff/2f70fdb0644c32c4154236c2b5c241bec92eac5e
不允許 ALTER TABLE ONLY / DROP EXPRESSION。目前的實作無法正確處理此情況,因此暫時禁止它。GENERATED 子句必須附加到欄位定義,並且不能像 DEFAULT 一樣稍後添加,因此如果子表具有父表沒有的生成表達式,則子欄位必然是 attlocal 欄位。因此,要實作 ALTER TABLE ONLY / DROP EXPRESSION,我們需要額外的程式碼來更新直接子表的 attislocal,有點類似於 DROP COLUMN 的處理方式,以便可以正確地轉儲和還原結果狀態。討論:https://postgres.tw/message-id/flat/15830.1575468847%40sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/bf797a8d9768239f5e3204b013044274b2c7c24a
啟用文字陣列的雜湊分割。hash_array_extended() 需要將 PG_GET_COLLATION() 傳遞給元素類型的雜湊函數。否則,具有定序感知的資料類型(例如文字)的雜湊函數將會出錯,因為非確定性定序的引入使雜湊函數也需要定序。這樣做的結果是,在這次變更之前,使用分割金鑰中文字上的陣列進行雜湊分割將無法運作。審閱者:Heikki Linnakangas hlinnaka [AT] iki.fi 審閱者:Tom Lane tgl [AT] sss.pgh.pa.us 審閱者:Michael Paquier michael [AT] paquier.xyz 討論:https://postgres.tw/message-id/flat/32c1fdae-95c6-5dc6-058a-a90330a3b621%40enterprisedb.com https://git.postgresql.org/pg/commitdiff/560564d3addcb6c54e13c1ca8bd11afafbb7ba11
移動目錄 toast table 宣告。將系統目錄 toast table 宣告從 catalog/toasting.h 移動到各個父表格的 catalog/pg_*.h 檔案中。原本將其拆分的原因是舊的 genbki 系統會按照讀取目錄檔案的順序產生輸出,因此所有 toasting 相關的東西都需要分開處理。但現在情況已非如此,將其放在一起更有意義。審閱者:John Naylor john.naylor [AT] enterprisedb.com 討論:https://postgres.tw/message-id/flat/c7cc82d6-f976-75d6-2e3e-b03d2cab26bb@2ndquadrant.com https://git.postgresql.org/pg/commitdiff/b4c9695e79f79d39d55853acac4c1493ac70a529
移動目錄索引宣告。將系統目錄索引宣告從 catalog/indexing.h 移動到各個父表格的 catalog/pg_*.h 檔案中。原本將其拆分的原因是舊的 genbki 系統會按照讀取目錄檔案的順序產生輸出,因此所有 indexing 相關的東西都需要分開處理。但現在情況已非如此,將其放在一起更有意義。審閱者:John Naylor john.naylor [AT] enterprisedb.com 討論:https://postgres.tw/message-id/flat/c7cc82d6-f976-75d6-2e3e-b03d2cab26bb@2ndquadrant.com https://git.postgresql.org/pg/commitdiff/bdc4edbea6fc847f806e1e7118d730e159512bfc
修正用戶端工具中多餘的錯誤訊息。一些用戶端工具重複了 libpq 已經提供的錯誤訊息。討論:https://postgres.tw/message-id/flat/3e937641-88a1-e697-612e-99bba4b8e5e4%40enterprisedb.com https://git.postgresql.org/pg/commitdiff/6be725e701611660b36642de9ff1d665a1eb24f5
修正錯誤訊息變更的測試。修正 6be725e701611660b36642de9ff1d665a1eb24f5 https://git.postgresql.org/pg/commitdiff/8cff66d309b90e03f1e76494375960f35eff6424
Tomáš Vondra 推送了
修正用於 volatile 運算式的 get_useful_pathkeys_for_relation。在考慮 Gather Merge 下方的 Incremental Sort 時,在將 pathkeys 與 EC 成員匹配時,我們需要更加小心。僅僅找到一個其 Vars 都在目前關聯式目標中的成員是不夠的;尤其是 volatile 運算式需要包含在目標中,否則使用 pathkey 還為時過早。回報者:Jaime Casanova 作者:James Coleman 審閱者:Tomas Vondra Backpatch-through:13,即新增 incremental sort 程式碼的位置 討論:https://postgr.es/m/CAJGNTeNaxpXgBVcRhJX%2B2vSbq%2BF2kJqGBcvompmpvXb7pq%2BoFA%40mail.gmail.com https://git.postgresql.org/pg/commitdiff/ebb7ae839d033d0f279670e249f54646a08b8c48
使用 INT64_FORMAT 在排序偵錯中列印 int64 變數。Commit 6ee3b5fb99 清理了與 incremental sort 相關的大部分 long/int64 混淆,但排序偵錯訊息仍在使用 %ld 作為 int64 變數。因此修正了這個問題。作者:Haiying Tang Backpatch-through:13,即新增 incremental sort 程式碼的位置 討論:https://postgr.es/m/4250be9d350c4992abb722a76e288aef%40G08CNEXMBPEKD05.g08.fujitsu.local https://git.postgresql.org/pg/commitdiff/90851d1d26f54ccb4d7b1bc49449138113d6ec83
正確地 detoast brin_form_tuple 中的資料。brin_form_tuple 未能考慮到值可能已被 toasted,從而將 toast 指標插入到索引中。這很容易導致索引損毀,因為 toast 資料可能會被 vacuum 刪除和清理。然而,清理並不在意索引,會留下無效的 toast 指標,從而觸發如下錯誤:ERROR: missing chunk number 0 for toast value 16433 in pg_toast_16426 一個不太嚴重的後果是由於索引列太大而導致的不一致失敗,具體取決於 brin_form_tuple 作用於列的 plain 版本還是 toasted 版本。例如,CREATE TABLE t (val TEXT); INSERT INTO t VALUES ('... long value ...') CREATE INDEX idx ON t USING brin (val); 很有可能成功,因為列很可能包含 toast 指標。切換 INSERT 和 CREATE INDEX 的順序很可能會失敗:ERROR: index row size 8712 exceeds maximum 8152 for index "idx" 因為這發生在列值被 toasted 之前。此錯誤自 PostgreSQL 9.5(引入 BRIN 索引)以來就已存在。所以需要全部 backpatch 回去。作者:Tomas Vondra 審閱者:Alvaro Herrera Backpatch-through:9.5 討論:https://postgr.es/m/20201001184133.oq5uq75sb45pu3aw@development 討論:https://postgr.es/m/20201104010544.zexj52mlldagzowv%40development https://git.postgresql.org/pg/commitdiff/7577dd84807a808f295dbfb0191540750ff98002
Fujii Masao 推送了
在 syslogger 中使用標準 SIGHUP 處理器。Commit 1e53fe0e70 變更了背景處理程序,使它們使用標準 SIGHUP 處理器。同樣地,此 commit 使 syslogger 使用標準 SIGHUP 處理器以簡化程式碼。作者:Bharath Rupireddy 審閱者:Fujii Masao 討論:https://postgr.es/m/CALj2ACXPorUqePswDtOeM_s82v9RW32E1fYmOPZ5NuE+TWKj_A@mail.gmail.com https://git.postgresql.org/pg/commitdiff/02d332297f9bfe63476d53a439cc8f3b05bb5e67
擺脫用於發送信號給 startup 處理程序的專用 latch。此 commit 捨棄了用於發送信號給 startup 處理程序的專用 latch,而改為使用其 procLatch,因為這與可能使用該 latch 的通用信號處理器相容性更好。Commit 1e53fe0e70 變更了背景處理程序,使它們使用標準 SIGHUP 處理器。同樣地,此 commit 也使 startup 處理程序使用標準 SIGHUP 處理器以簡化程式碼。作者:Fujii Masao 審閱者:Bharath Rupireddy, Michael Paquier 討論:https://postgr.es/m/CALj2ACXPorUqePswDtOeM_s82v9RW32E1fYmOPZ5NuE+TWKj_A@mail.gmail.com https://git.postgresql.org/pg/commitdiff/ac22929a2613e122708bd0172508ac863c51c1cc
修正 commit ac22929a26 造成的區段錯誤。Commit ac22929a26 變更了 recoveryWakeupLatch,使其在 recovery 結束時重設為 NULL。此變更可能會導致 buildfarm 成員 'elver' 中出現區段錯誤。先前,latch 在呼叫 ShutdownWalRcv() 後重設為 NULL。但是,ShutdownWalRcv() 與 walreceiver 的實際退出之間可能存在一個時間間隔。如果 walreceiver 在該時間間隔內設定了 latch,則可能會發生區段錯誤。為了修正這個問題,此 commit 變更了 walreceiver,使其僅在 latch 尚未重設為 NULL 時才設定 latch。作者:Fujii Masao 討論:https://postgr.es/m/5c1f8a85-747c-7bf9-241e-dd467d8a3586@iki.fi https://git.postgresql.org/pg/commitdiff/113d3591b859fb8dc191bc0599d1ad62d91f1aa4
pg_prewarm:使 autoprewarm leader 使用標準 SIGHUP 和 SIGTERM 處理器。Commit 1e53fe0e70 變更了背景處理程序,使它們使用標準 SIGHUP 處理器。同樣地,此 commit 使 autoprewarm leader 處理程序也使用標準 SIGHUP 和 SIGTERM 處理器,以簡化程式碼。作者:Bharath Rupireddy 審閱者:Kyotaro Horiguchi, Fujii Masao 討論:https://postgr.es/m/CALj2ACXPorUqePswDtOeM_s82v9RW32E1fYmOPZ5NuE+TWKj_A@mail.gmail.com https://git.postgresql.org/pg/commitdiff/53f614f1302d56e5fbb98826c7eee3c715411184
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 發布了。
修復 index_get_partition 中的記憶體洩漏。 當請求在表分割區中沒有索引分割區的索引時,索引列表會洩漏。 誠然,這不是一個常見的案例 - 而且在大多數發生這種情況時,呼叫者都會拋出錯誤 - 但為了清潔起見以及以防任何第三方程式碼調用此函數,值得修正。 同時,移除使用 lfirst_oid() 來獲取我們已經擁有的值的用法。 作者:Justin Pryzby pryzby [AT] telsasoft.com 審閱人:Michael Paquier michael [AT] paquier.xyz 討論:https://postgr.es/m/20201105203606.GF22691@telsasoft.com https://git.postgresql.org/pg/commitdiff/623644f02cbde7ad3812b201bd36213a206c3341
訊息樣式改進。 * 避免毫無意義地強調索引清理是由並行工作者執行的; 使用者不在乎。 * 不要給人一種在 TOAST 表上非並行重建無效索引會成功的印象,因為它不會。 * 為一個神秘訊息添加一個“translator:”註解。 討論:https://postgr.es/m/20201107034943.GA16596@alvherre.pgsql 審閱人:Michael Paquier michael [AT] paquier.xyz https://git.postgresql.org/pg/commitdiff/52eec1c53aa6a7df1683fba79078793f1d0eba42
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 中移除一些重複的程式碼。