Planet PostgreSQL: https://planet.postgresql.org/
本週的 PostgreSQL 每週新聞由 David Fetter 為您帶來
請在太平洋標準時間 (PST8PDT) 星期日下午 3:00 前將新聞和公告提交至 david@fetter.org。
Michaël Paquier 推送了
修復 src/bin/pg_basebackup/ 中的幾個記憶體洩漏。這些是由 7fbe0c8 引入的,並且可能發生在 pg_basebackup 和 pg_receivewal 中。根據 Coverity 針對 walmethods.c 中的錯誤的回報,我經過更多檢查後發現了 receivelog.c 中的錯誤。Backpatch-through: 10 https://git.postgresql.org/pg/commitdiff/4ef64c425dbcda151c9f163aadff982343808e09
doc:修正使用 PGOPTIONS 運行迴歸測試的命令示例。該文件提到了 log_checkpoints 的使用,但在此上下文中無法使用。此提交將 log_checkpoints 替換為 force_parallel_mode,這是一個用於執行與平行處理相關檢查的開發人員選項。854434c 中的疏忽。作者:Haiying Tang 討論:https://postgr.es/m/OS0PR01MB6113954B883ACEB2DDC973F2FBE59@OS0PR01MB6113.jpnprd01.prod.outlook.com Backpatch-through: 14 https://git.postgresql.org/pg/commitdiff/efe080220942fb8c2fdca66a3ab436159f7db86b
在解析整數選項時,跳過尾隨的空白字元。strtoint() 通過 strtol() 會跳過前導空白字元,但同樣的規則不適用於尾隨空白字元,從而導致不一致的行為。更改了一些測試以涵蓋更多此區域。作者:Michael Paquier 審閱者:Kyotaro Horiguchi 討論:https://postgr.es/m/YP5Pv0d13Ct+03ve@paquier.xyz https://git.postgresql.org/pg/commitdiff/f7a9a3d4b24a4ad0de7992f01a0dd2a02ccd30a4
簡化 pg_receivewal 的 TAP 測試中比對模式檢查。測試的 ZLIB 部分中,將未壓縮的部分段的名稱與已完成的壓縮段進行比對的檢查使用了 m//,而簡單的相等性檢查就足夠了。這使得測試更加嚴格,而不會影響其覆蓋範圍。作者:Kyotaro Horiguchi 討論:https://postgr.es/m/20210726.174622.826565852378770261.horikyota.ntt@gmail.com https://git.postgresql.org/pg/commitdiff/24ba1a87e4056ec34c8a685633a1a14fb89e5700
在 ALTER TABLE 中新增 SET ACCESS METHOD 的支援。用於支援變更表格的存取方法的邏輯,與變更表空間或關係持久性的邏輯類似,需要以對所變更的關係的獨佔鎖定來重寫表格。從舊關係掃描元組並將它們插入到新關係時,ALTER TABLE 中完成的表格重寫已經通過表格 AM 層,使得此實現非常簡單。請注意,不支援分割表格,因為這些表格沒有定義任何存取方法。作者:Justin Pryzby, Jeff Davis 審閱者:Michael Paquier, Vignesh C 討論:https://postgr.es/m/20210228222530.GD20769@telsasoft.com https://git.postgresql.org/pg/commitdiff/b0483263dda0824cc49e3f8a022dab07e1cdf9a7
澄清一些使用俚語 "up2date" 的註解。這些大部分都是新的,從 a8fd13c 開始,對於普通讀者來說,"up-to-date" 更容易解析。作者:Peter Smith 討論:https://postgr.es/m/CAHut+PtHbHvgOjs_R9LyDF21j-Wn8SxoTtWMQNP2ifXN6t2cSg@mail.gmail.com https://git.postgresql.org/pg/commitdiff/7b7fbe1e8bb4b2a244d1faa618789db411316e55
在 pg_verifybackup 中新增遺失的 exit(),當找不到 pg_waldump 時。預設情況下,pg_verifybackup 需要 pg_waldump 來檢查備份所需的 WAL 段範圍,除非指定了 --no-parse-wal。該程式碼檢查安裝中是否存在二進位檔 pg_waldump,並報告錯誤,但它忘記正確退出()。這可能會導致報告令人困惑的錯誤。審閱者:Robert Haas, Fabien Coelho 討論:https://postgr.es/m/YQDMdB+B68yePFeT@paquier.xyz Backpatch-through: 13 https://git.postgresql.org/pg/commitdiff/2ad98fdf53edf1a90123e3b189cc6f0a31986891
在各種二進位檔的錯誤路徑中新增一些遺失的 exit() 呼叫。完成以下變更:- 在 pg_archivecleanup 中,舊 WAL 段的清理永遠不會立即失敗。- 在 pgbench 中,線程屏障的初始化不會嚴重失敗。- 在 pg_recvlogical 中,stat() 失敗從未獲得該呼叫。- 在 pg_basebackup 中,兩個 chmod() 報告了在解壓縮新接收的一些 tar 資料時發生的失敗,而沒有 exit()。即使在此失敗之後,也可能可以繼續寫入一些資料,但最終可能會使用戶感到困惑。這些無疑是錯誤,但它們會發生在不太可能發生故障的程式碼路徑中,因此沒有進行 backpatch。審閱者:Robert Haas, Fabien Coelho 討論:https://postgr.es/m/YQDMdB+B68yePFeT@paquier.xyz https://git.postgresql.org/pg/commitdiff/856de3b39cf6041338b286a99257c324ce647f4e
修正 tab-complete.c 中的錯字。在 b048326 中引入。報告者:Jeff Davis 討論:https://postgr.es/m/10785e3e9456a5d761164d3e60d9c4981b80e321.camel@j-davis.com https://git.postgresql.org/pg/commitdiff/15c6ede04577f856f702bf0a032297de667f382a
對於 pg_receivewal --endpos 的新呼叫,在 TAP 測試中使用 --no-loop。這些測試並非旨在失敗,但如果它們失敗了,例如在某些 Windows 案例中,由於 ZLIB (?),它們可能會卡住。使用 --no-loop 會使測試立即失敗。使用 --endpos 的最舊的測試已經這樣做了。這些測試已在 ffc9dda 中添加。審閱者:Andrew Dunstan 討論:https://postgr.es/m/ec093ff1-a53c-0091-46a2-4537354b0dd4@dunslane.net https://git.postgresql.org/pg/commitdiff/3df93a66593c344e6298e618df3fa5090fca4309
在 Windows 上為 ZLIB 啟用 pg_receivewal 的 TAP 測試,第三次嘗試。這會還原提交 6a2c532。fairywren 和 bowerbird 因為連結到不正確的 ZLIB 版本而導致這些測試失敗,從而導致 SIGBREAKs 之類的錯誤,這些錯誤停止了 buildfarm 運行,或者在寫入壓縮的 WAL 段時出現 EACCES 失敗。Andrew Dunstan 在這裡完成了所有調查,因此他應該得到能夠在 Windows 上啟用這些測試的所有功勞。討論:https://postgr.es/m/9040d5ed-6462-66a4-07ac-2923785ae563@dunslane.net https://git.postgresql.org/pg/commitdiff/0b8ea707580640f9d5562de77f4b563fa9131547
David Rowley 推送了
修正 get_agg_clause_costs 函式中不正確的註解。調整 get_agg_clause_costs 函式的標頭註解,使其符合該函式目前的實際功能。自 0a2bc5d61 以來,未曾進行遞迴搜尋。它也不會像註解聲稱的那樣決定 aggtranstype。這些都在 preprocess_aggref() 函式中完成。preprocess_aggref 現在也決定了 numOrderedAggs,因此請刪除 get_agg_clause_costs 也計算「計數」的說法。通常,因為這只是註解的調整,可能不值得回溯修補,但由於此程式碼是 PG14 的新功能,且該版本仍處於 beta 階段,因此讓註解與程式碼匹配似乎是值得的。討論:https://postgr.es/m/CAApHDvrrGrTJFPELrjx0CnDtz9B7Jy2XYW3Z2BKifAWLSaJYwQ@mail.gmail.com 回溯修補:14 https://git.postgresql.org/pg/commitdiff/2b58f894e56a1944e824e19c92337d6bf24d9c41
移除 MSVC 腳本中看似不需要的 include 目錄。這似乎是在 ee3b4188a 中加入的,但不太清楚為什麼需要該 commit 中所做的變更,因為 320c7eb8c(日期為 18 個月前)加入了將 fmgroids.h 複製到 src/include/utils 的程式碼。amcheck 似乎在沒有新增額外 include 目錄的情況下也能正常運作,因此 dblink 也許也可以。這在我的 VS2017 環境中建置正常,但 buildfarm 可能會提醒我們為什麼需要 ee3b4188a。只有一種方法可以確定。討論:https://postgr.es/m/CAApHDvpo6g5csCTjc_0C7DMvgFPomVb0Rh-AcW5afd=Ya=LRuw@mail.gmail.com https://git.postgresql.org/pg/commitdiff/4b763ff642e1a3608cbcaff062f6c2f465bfc6bd
文件:闡明 ATTACH PARTITION 期間取得的鎖定層級。不太清楚在 ATTACH PARTITION 操作期間,DEFAULT 分割區上會持有哪個(如果有的話)鎖定層級。此外,闡明如果 DEFAULT 分割區或要附加的表格本身是分割表格,則會取得哪些鎖定。這裡我僅回溯修補到 v12,因為在那之前,我們會取得分割表格上的 ACCESS EXCLUSIVE 鎖定。當分割表格本身以 ACCESS EXCLUSIVE 鎖定時,提及其他表格上取得的鎖定似乎不太重要。作者:Matthias van de Meent、David Rowley 討論:https://postgr.es/m/CAEze2WiTB6iwrV8W_J=fnrnZ7fowW3qu-8iQ8zCHP3FiQ6+o-A@mail.gmail.com 回溯修補至:12 https://git.postgresql.org/pg/commitdiff/8709228775b549a2388e6568f463a4115e5a4c10
在 MSVC 建置腳本中一致地使用 AddFile 函式。我們似乎混合使用手動添加到 'files' 雜湊和呼叫 Addfile() 方法。讓我們一致地使用 AddFile()。審閱人:Dagfinn Ilmari Mannsåker 討論:https://postgr.es/m/CAApHDvpo6g5csCTjc_0C7DMvgFPomVb0Rh-AcW5afd=Ya=LRuw@mail.gmail.com https://git.postgresql.org/pg/commitdiff/ed1884a2fedeffd2e6902451a9d41f4b3f6e859f
使 MSVC 建置腳本中的 includes 欄位成為陣列。先前 'includes' 欄位是字串。當它定義為陣列時,管理起來會稍微好一些。這使我們能夠更輕鬆地偵測和消除重複項。審閱人:Álvaro Herrera、Andrew Dunstan、Dagfinn Ilmari Mannsåker 討論:https://postgr.es/m/CAApHDvpo6g5csCTjc_0C7DMvgFPomVb0Rh-AcW5afd=Ya=LRuw@mail.gmail.com https://git.postgresql.org/pg/commitdiff/33d74c5d00e45248df66fa1bcd9222e0713ea5b1
不要在 MSVC 腳本中重複引用和函式庫。為了避免在 MSVC 建置腳本產生的 Visual Studio 專案檔案中重複引用和函式庫,讓它們在新增相同的引用或函式庫之前檢查是否存在特定的引用或函式庫。審閱人:Álvaro Herrera、Andrew Dunstan、Dagfinn Ilmari Mannsåker 討論:https://postgr.es/m/CAApHDvpo6g5csCTjc_0C7DMvgFPomVb0Rh-AcW5afd=Ya=LRuw@mail.gmail.com https://git.postgresql.org/pg/commitdiff/15f16ec6511cf50374b09876e39c6939f2da0f08
調整 MSVC 建置腳本以解析 Makefiles 以尋找定義。這會調整 MSVC 建置腳本以查看 Makefile 中提到的編譯標記,以尋找 -D 參數,以便確定應在 Visual Studio 建置中定義哪些常數。此變更產生的一個小異常是,ltree contrib 模組的 Makefile 定義了 LOWER_NODE,但在 MSVC 建置腳本中未正確定義它。這意味著與使用 make 建置環境的建置相比,MSVC 建置在 ltree 模組中的大小寫靈敏度會有所不同。為了維持此處的相同行為,我們從 Makefile 中刪除了 -DLOWER_NODE,並且僅始終在 ltree.h 中為非 MSVC 建置定義它。我們需要在此處維持舊的行為,因為這會影響使用 ltree 類型時 GiST 索引的磁碟相容性。此處唯一另一個產生的變更是,現在為 autoinc、insert_username 和 moddatetime contrib 模組定義了 REFINT_VERBOSE。先前在 MSVC 上,僅為 refint 模組定義了此變數。這使行為與使用 make 的建置環境保持一致,因為所有 4 個模組都共享相同的 Makefile。審閱人:Tom Lane 討論:https://postgr.es/m/CAApHDvpo6g5csCTjc_0C7DMvgFPomVb0Rh-AcW5afd=Ya=LRuw@mail.gmail.com https://git.postgresql.org/pg/commitdiff/245de48455daaf51f2f3e8b198d87b5dd9fd4516
Tom Lane 推送了
加強 pg_stat_statements 測試以防止 CLOBBER_CACHE_ALWAYS。事實證明,buildfarm 尚未測試此功能,這將很快改變。Julien Rouhaud,根據我的報告 討論:https://postgr.es/m/42557.1627229005@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/0806d08d4626f0a71a4e83cb399ee965a8aac99b
在 EXPLAIN 及相關輸出中使用 "pg_temp" 結構描述別名。此修補程式導致 EXPLAIN 輸出使用 "pg_temp" 結構描述別名(而不是該結構描述的實際名稱)來引用目前會話暫存結構描述中的物件。這對於我們自己的測試目的很有用,因為它將穩定此類情況下的 EXPLAIN VERBOSE 輸出,使我們能夠在迴歸測試中使用它。對於最終用戶來說,它也應該不太令人困惑。由於 ruleutils.c 需要更改行為才能實現此目的,因此該更改也會洩漏到 ruleutils.c 的其他一些使用者,例如 pg_get_viewdef()。AFAICS 不會造成任何問題。我們發現積極嘗試全面更改此行為會導致問題,但只要 "pg_temp" 僅出現在生成的 SQL 文本中,我認為它會沒事的。在此過程中,使 get_namespace_name_or_temp 符合與 get_namespace_name 相同的 API,即它返回一個 palloc 的字串或 NULL。目前的行為沒有導致任何錯誤,因為沒有呼叫者嘗試 pfree 結果,但如果它得到更廣泛的使用,這可能會成為一個問題。Amul Sul,由我審閱和擴充 討論:https://postgr.es/m/CAAJ_b97W=QaGmag9AhWNbmx3uEYsNkXWL+OVW1_E1D3BtgWvtw@mail.gmail.com https://git.postgresql.org/pg/commitdiff/48c5c9068211e0a04fd9553c8714b2821ed3ad17
在事件觸發器中,僅對我們自己的暫存結構描述使用 "pg_temp"。pg_event_trigger_ddl_commands 使用 "pg_temp" 來引用任何暫存結構描述,而不僅僅是目前後端的暫存結構描述。這似乎過度了。DDL 命令不太可能引用其他會話的暫存物件,但如果它們這樣做了,"pg_temp" 將是最具誤導性的操作顯示方式。雖然這看起來像一個錯誤,但有人期望目前的行為並非完全不可能。因此,在 HEAD 中修復,但不要回溯修補。討論:https://postgr.es/m/CAAJ_b97W=QaGmag9AhWNbmx3uEYsNkXWL+OVW1_E1D3BtgWvtw@mail.gmail.com https://git.postgresql.org/pg/commitdiff/024515cac50e246d92bbe67e9de4da0f302972ef
穩定新的迴歸測試輸出。提交 48c5c9068 未能考慮到強制啟用 jit = on 的 buildfarm animals。我很驚訝這在 explain.sql 中的其他地方沒有出現,所以關閉整個測試腳本,而不僅僅是一個新的測試案例。根據 buildfarm。https://git.postgresql.org/pg/commitdiff/674f6fe8e65a37289432fa373e5d742a36751ae8
修正 multiranges 的多型引數解析中的錯誤。我們未能處理 anycompatiblemultirange 的 UNKNOWN 類型輸入;這應該拋出一個錯誤,表明我們不知道如何解析 multirange 類型。我們也未能從 anycompatiblemultirange 輸入推斷 anycompatiblerange 輸出的類型,反之亦然。根據 Alexander Lakhin 的錯誤 #17066。向 v14 回溯修補,multiranges 在該版本中新增。討論:https://postgr.es/m/17066-16a37f6223a8470b@postgresql.org https://git.postgresql.org/pg/commitdiff/336ea6e6ff1109e7b83370565e3cb211804fda0c
改善 libpq 在錯誤訊息建構期間處理 OOM 的方式。提交 ffa2e4670 更改了 libpq,以便在一個操作(連接嘗試或查詢)期間發生的多個錯誤報告會累積在 conn->errorMessage 中,而之前新的錯誤通常會取代先前的任何錯誤。至少在理論上,這使我們更容易在 errorMessage 緩衝區中耗盡記憶體。如果確實發生了,使用者將只剩一個空的錯誤報告,這非常沒有幫助。我們可以透過依靠 pqexpbuffer.c 現有的「損壞緩衝區」慣例來追蹤我們是否在目前操作的錯誤字串中遇到 OOM 來改善這一點,然後在讀取 errorMessage 的少數幾個地方替換為一個常數「記憶體不足」字串。同時,將相同的方法應用於 pqInternalNotice 和 pqGetErrorNotice3 中類似的 OOM 情況。回溯修補至 v14,其中 ffa2e4670 引入。原則上,它可以回溯得更遠;但考慮到缺乏現場報告,這種風險在較舊的分支中似乎可以忽略不計。討論:https://postgr.es/m/530153.1627425648@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/514b4c11d24701d2cc90ad75ed787bf1380af673
在 postgres_fdw 中,允許將 CASE 運算式推送到遠端伺服器。這非常簡單,除了需要檢查 CaseTestExpr 節點是否具有未從遠端 Var 衍生的定序。為此,請檢查 CASE 的 "arg" 運算式,然後將該資訊傳遞到 WHEN 運算式的遞迴檢查中。Alexander Pyhalov,由 Gilles Darold 和我審閱。討論:https://postgr.es/m/fda09032e90d85d9b726a41e03f9097f@postgrespro.ru https://git.postgresql.org/pg/commitdiff/5d44fff01eebfe0c7a118326605864e662a44f46
文件:為 "domain" 新增一個術語表條目。Anton Voloshin 和 Jürgen Purtz,由 Laurenz Albe 審閱。討論:https://postgr.es/m/2ea65bdf-1380-f088-02bd-ff1a31ed265c@postgrespro.ru https://git.postgresql.org/pg/commitdiff/3dddb2a8219d3cfd163a83561d4b4613cd2ea376
使用 elog,而不是 Assert,來報告未能提供外部快照。截至提交 84f5c2908,執行 SQL 命令(透過 SPI 或其他方式)需要具有活動 Portal,或呼叫者建立的活動快照。我們只是 Assert'ing 情況確實如此。但是我們現在收到了一些不同的報告,說明人們正在測試不符合此要求的擴充功能,並且對由此產生的崩潰感到困惑。讓我們將 Assert 轉換為 test-and-elog,希望能讓擴充功能作者更清楚地了解此問題。根據 Liu Huailing 和 RekGRpth 的抱怨。像之前的提交一樣,回溯修補至 v11。討論:https://postgr.es/m/OSZPR01MB6215671E3C5956A034A080DFBEEC9@OSZPR01MB6215.jpnprd01.prod.outlook.com 討論:https://postgr.es/m/17035-14607d308ac8643c@postgresql.org https://git.postgresql.org/pg/commitdiff/ef12f32c0870b73ab7589ffc178094ac9ba3e84f
文件:在 9.7.3 中按字母順序排列 regexp_foo() 函數描述。毫無明顯原因(除了無疑是歷史意外),regexp_replace() 順序錯誤。重新排序以符合這些函數在 9.4 中列出的方式。(這意味著 substring() 仍然排在第一位,因為它是 SQL 標準,而其餘的不是。)除了移動它之外,我沒有觸及文本。這只是為了減少即將新增內容的差異中的混淆。https://git.postgresql.org/pg/commitdiff/64a1f225654f8866422010ff28e0d3384ae4c3af
Dean Rasheed 推送
允許數值比例為負數或大於精度。以前,當指定 NUMERIC(precision, scale) 時,比例必須在範圍 [0, precision] 內,這是根據 SQL 規範。此提交將允許比例的範圍擴展到 [-1000, 1000],獨立於精度(其有效範圍仍然是 [1, 1000])。負比例意味著在小數點之前進行捨入。例如,可以使用比例為 -3 的列來將值捨入到最接近的千位。請注意,顯示比例仍然是非負數,因此在這種情況下,顯示比例將為零,並且將顯示小數點之前的所有數字。大於精度的比例支援小數點後立即有零的小數值。藉此機會整理打包、解包和驗證 typmod 整數內容的程式碼,將其封裝在一小組新的內聯函式中。增加 catversion,因為數值欄位的 atttypmod 允許的內容已變更。這不是需要重新初始化資料庫的變更,但 typmod 中的負比例值會使舊的後端感到困惑。Dean Rasheed,Tom Lane 進行了額外的改進。由 Tom Lane 審閱。討論:https://postgr.es/m/CAEZATCWdNLgpKihmURF8nfofP0RFtAKJ7ktY6GcZOPnMfUoRqA@mail.gmail.com https://git.postgresql.org/pg/commitdiff/085f931f52494e1f304e35571924efa6fcdc2b44
修正 numeric_power() 中邊緣情況的錯誤和精度損失。這修正了將數字提高到非常大的次方時出現的幾個相關問題。首先,當將一個負數提高到一個非常大的整數次方時,結果應該是明確定義的,但之前的程式碼只有在指數足夠小,可以通過 power_var_int() 時才能處理。否則,它會拋出一個內部錯誤,試圖對負數取對數。透過在 power_var() 的一般情況中添加適當的處理來解決這個問題,以處理負數底數,並在那裡檢查整數次方。接下來,當將一個絕對值略小於 1 的數字(正數或負數)提高到一個非常大的次方時,隨著次方的增加,結果應該接近於零。然而,在某些情況下,對於足夠大的次方,這將會失去所有精度,並返回 1 而不是 0。這是由於為最終全精度計算計算 local_rscale 的方式造成的:local_rscale = rscale + (int) val - ln_dweight + 8 右邊的前兩項旨在給出結果中所需的有效位數(“val”是估計的結果權重)。然而,這未能考慮到 rscale 被限制為 NUMERIC_MAX_DISPLAY_SCALE(1000)的最大值,並且結果權重可能小於 -1000,導致它們的總和小於零,從而導致精度損失。透過強制將計算出的有效位數設為非負數來修正這個問題。它可以是零(當結果權重小於 -1000 時),因為 local_rscale 值包含一些額外的位數,以確保精確的結果。最後,向 exp_var() 和 power_var() 添加額外的下溢檢查,以便它們對於結果與零無法區分的情況,始終如一地返回零。此程式碼的一些路徑已經在這種情況下返回零,但其他路徑拋出了溢位錯誤。Dean Rasheed,由 Yugo Nagata 審閱。討論:http://postgr.es/m/CAEZATCW6Dvq7+3wN3tt5jLj-FyOcUgT5xNoOqce5=6Su0bCR0w@mail.gmail.com https://git.postgresql.org/pg/commitdiff/4dd5ce2fd9b9b2134886fee7fe4cb36d1988adb2
Tomáš Vondra 推送了
Álvaro Herrera 推送了
移除新增的無用斷言檢查。Coverity 抱怨說我的 commit 80ba4bb38353 為一致性檢查添加了一個可疑的編碼,檢查是否存在多個具有特定 tgrelid/tgparentid 組合的列。但是我們沒有在其他任何地方明確檢查這個,如果我們要檢查它,它應該是一個完整的 shouldn't-happen elog,而不僅僅是一個 assert。無論如何,這似乎不是很重要,所以移除它。討論:https://postgr.es/m/1337562.1627224583@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/21b3aa9c8faf39ef45a5223681d8947e0a00e7da
當移除相關的配置行時,設定 pg_setting.pending_restart。這改變了在更改需要重新啟動的配置選項後,檢查 pg_file_settings 檢視表的行為。使用者需要知道,除非重新啟動,否則此類選項的任何更改都不會生效,如果在不移除它的情況下編輯該行,則此功能可以正常工作。但是,對於完全移除該行的情況,不會設定該標誌,因為僅在 set_config_option 中設定了該標誌,但對於移除的行沒有呼叫它。修復。(參考:commits 62d16c7fc561 和 a486e35706ea) 作者:Álvaro Herrera alvherre@alvh.no-ip.org 審閱者:Daniel Gustafsson daniel@yesql.se 審閱者:Tom Lane tgl@sss.pgh.pa.us 討論:https://postgr.es/m/202107262302.xsfdfc5sb7sh@alvherre.pgsql https://git.postgresql.org/pg/commitdiff/93a0bf2390327a482ff37317f6e17547e735409e
關閉複製槽測試程式碼中的另一個競爭條件。Buildfarm 顯示,當檢查點比預期更早開始時,此測試還有另一種失敗模式,因此我們檢測到一個不是我們想要的“檢查點完成”行。更改配置以嘗試防止這種情況。依照 buildfarm,同時,更新在 commit d18e75664a2f 中被遺忘的一個註釋。作者:Kyotaro Horiguchi horikyota.ntt@gmail.com 討論:https://postgr.es/m/20210729.162038.534808353849568395.horikyota.ntt@gmail.com https://git.postgresql.org/pg/commitdiff/ce197e91d02ca38ac1b956a3e0c11596099e7893
Bruce Momjian 推送了
pg_resetxlog:新增選項以設定最舊的 xid,並由 pg_upgrade 使用。新增 pg_resetxlog -u 選項以在 pg_control 中設定最舊的 xid。之前 -x 將此值設定為比 -x 值小 -20 億。但是,這會導致伺服器立即掃描所有關係的 relfrozenxid,以便將 pg_control 的最舊 xid 推進到 autovacuum_freeze_max_age 範圍內,這是效率低下的,並且可能會中斷診斷恢復。pg_upgrade 將使用此選項來更好地建立與舊叢集匹配的新叢集。由 Jason Harvey、Floris Van Nee 報告 討論:https://postgr.es/m/20190615183759.GB239428@rfd.leadboat.com, 87da83168c644fd9aae38f546cc70295@opammb0562.comp.optiver.com 作者:Bertrand Drouvot 回溯到:9.6 https://git.postgresql.org/pg/commitdiff/74cf7d46a91d601e0f8d957a7edbaeeb7df83efc
doc:對於各種 substring 函數,記錄是否僅第一個匹配。由 troy@frericks.us 報告 討論:https://postgr.es/m/162614304115.701.2392941350859387646@wrigleys.postgresql.org 回溯到:13 https://git.postgresql.org/pg/commitdiff/6feebcb6b44631c3dc435e971bd80c2dd218a5ab
Andrew Dunstan 推送了
停用 pg_upgrade 建立的 Windows 腳本中的命令回顯。這使它們更像 Unix 對應物。討論:https://postgr.es/m/73deed30-3363-44e9-48a5-98aa66a8a00f@dunslane.net https://git.postgresql.org/pg/commitdiff/91d76613b7ec75b6642accaff91dc7d657e549e9
將 -w 加回 PostgresNode 中 pg_ctl (re)start 的標誌。現在這是 pg_ctl 的預設值,但是在此處顯式地設定該標誌沒有任何危害,並且有助於 PostgresNode 模組的向後相容性。https://git.postgresql.org/pg/commitdiff/b33259e261ae99dc7c503a6a7615bd492047588b
將 adjust_conf 方法新增到 PostgresNode。此方法將會修改或刪除設定檔中現有的一行,而不是簡單地附加到檔案末尾。這使得調整舊版本的檔案更加簡單和精簡。https://git.postgresql.org/pg/commitdiff/dbfe6e4b1766369654e20113b0cab79bd939d544
統一 PostgresNode 的 new() 和 get_new_node() 方法。現在 PostgresNode 只有一個建構子,其慣用名稱為 'new'。該方法未由類別匯出,必須以 "PostgresNode->new('name',[args])" 的形式呼叫。使用 PostgresNode 的所有 TAP 測試都已相應修改。第三方腳本需要調整,這是一個相當機械化的過程 (我只是使用了 sed 腳本)。https://git.postgresql.org/pg/commitdiff/201a76183e2056c2217129e12d68c25ec9c559c8
為 PostgresNode install_path 新增一個 getter 函數。經驗表明這可能很有用,雖然不是絕對必要,但我們通常不應公開 PostgresNode 物件的內部結構。https://git.postgresql.org/pg/commitdiff/87076c40834c2971f073f69be33a5f95ffa8f8a1
新增 PostgresVersion.pm 方法以發出主要版本字串。對於 10 之前的版本,這將產生帶點符號,除非給定分隔符參數,在這種情況下將使用該參數。https://git.postgresql.org/pg/commitdiff/1e8d89f8800e0aaafc66e87e8e5fedf5dbd038cf
從 PostgresNode 移除 Exporter 的最後殘餘。想要呼叫 get_free_port 的客戶端現在需要透過完整的名稱來呼叫:PostgresNode::get_free_port()。https://git.postgresql.org/pg/commitdiff/5dc932f9e7b7d1992abd33d1c519899dd1c30272
避免在符號連結目錄上呼叫 TestLib::perl2host。已經觀察到某些版本的 msys2/Windows 會在 perl2host 中解析符號連結,而不僅僅是追蹤它們。這會抵消使用符號連結的較短路徑指向較長路徑,並導致某些測試失敗。因此,我們在符號連結的父目錄上呼叫 perl2host,然後只使用該結果。應用於觀察到問題的版本 14。https://git.postgresql.org/pg/commitdiff/b35a67bc04243da609843949c53e6841e748243a
使 TestLib::perl2host 更加一致和穩健。有時觀察到 cygpath 會傳回帶有尾端斜線的路徑。這可能會導致問題。此外,在正斜線的使用方面,使 "cygpath" 的使用與 "pwd -W" 保持一致。回溯修補到引入目前程式碼的版本 14。https://git.postgresql.org/pg/commitdiff/bad106752272c05de5a56036b8a84ae6ff3249a0
抑制 perl 關於未初始化值的警告。https://git.postgresql.org/pg/commitdiff/0d1401931868e03342ed4689b5af2522eb40f750
藤井正雄推送
避免在錯誤訊息中使用含糊不清的詞 "non-negative"。使用 "non-negative" 這個詞的錯誤訊息令人困惑,因為它對於是否接受零值存在歧義。此提交透過用不太含糊的詞語(例如 "greater than zero" 或 "greater than or equal to zero")替換它來改進這些錯誤訊息。此外,此提交還將關於 "non-negative" 這個詞的注意事項新增到錯誤訊息樣式指南中,以協助編寫新的錯誤訊息。當 postgres_fdw 選項 fetch_size 設定為零時,之前會報告錯誤訊息 "fetch_size requires a non-negative integer value"。此錯誤訊息完全錯誤。因此,回溯修補到所有支援的版本,在這些版本中可能會拋出此類錯誤訊息。報告者:Hou Zhijie 作者:Bharath Rupireddy 審閱者:Kyotaro Horiguchi, Fujii Masao 討論:https://postgr.es/m/OS0PR01MB5716415335A06B489F1B3A8194569@OS0PR01MB5716.jpnprd01.prod.outlook.com https://git.postgresql.org/pg/commitdiff/0e1275fb073cbbff2185f4067d67785e56941e50
在中止記錄的 WAL 重播期間,更新截斷的最小恢復點。如果截斷檔案,我們必須更新 minRecoveryPoint。一旦截斷檔案,就沒有回頭路了;在早於該點的點停止恢復是不安全的。提交 7bffc9b7bf 更改了 xact_redo_commit(),以便在截斷時更新 minRecoveryPoint,但忘記更改 xact_redo_abort()。回溯修補到所有支援的版本。報告者:mengjuan.cmj@alibaba-inc.com 作者:Fujii Masao 審閱者:Heikki Linnakangas 討論:https://postgr.es/m/b029fce3-4fac-4265-968e-16f36ff4d075.mengjuan.cmj@alibaba-inc.com https://git.postgresql.org/pg/commitdiff/a00c138b78521b9bc68b480490a8d601ecdeb816
John Naylor 推送
不允許在 date_bin() 中使用負步長。目前尚不清楚負步長的語意,因此會拋出錯誤。根據 Bauyrzhan Sakhariyev 的報告 審閱者:Tom Lane, Michael Paquier 討論:https://postgres.tw/message-id/CAKpL73vZmLuFVuwF26FJ%2BNk11PVHhAnQRoREFcA03x7znRoFvA%40mail.gmail.com 回溯修補到 v14 https://git.postgresql.org/pg/commitdiff/3ba70d4e152372fd8ab90ed0887ee08d505ef306
修復 ECPG 數值到整數轉換中的範圍檢查。先前的程式碼防止 -INT_MAX 而不是 INT_MIN,導致 -2147483648 被拒絕為超出範圍。根據 Kevin Sweet 的錯誤 #17128 討論:https://postgres.tw/message-id/flat/17128-55a8a879727a3e3a%40postgresql.org 審閱者:Tom Lane 回溯修補到所有支援的分支 https://git.postgresql.org/pg/commitdiff/5fcf3945bd90bb0170938ad780159779367dc8ac
移除 pg_attribute.attcompression 的冗餘設定。自 e6241d8e0 以來,沒有任何屬性需要在 initdb 期間使用非預設值,因此讓通常的預設值機制來處理它。https://git.postgresql.org/pg/commitdiff/89404a01b4dadab8231dfa08cab507191c2ac929
Daniel Gustafsson 推送
從 test/ssl .gitignore 中移除未使用的目錄。從測試執行儲存的客戶端日誌已在 1caef31d9 中移除,但 .gitignore 檔案中的條目仍然存在。雖然這也存在於舊分支中,但這主要是一個外觀上的修復,因此不進行回溯修補。審閱者:Michael Paquier 討論:https://postgr.es/m/F8E73040-BB6F-43BF-95B4-3CEC037BE856@yesql.se https://git.postgresql.org/pg/commitdiff/454ae15d10ea2d11669b69e82c98fbd03126fd69
docs: 修復 bit_count 範例輸出。bit_count(::bytea) 範例的傳回值假設 standard_conforming_strings 的非預設值。這已在提交 ebedd0c78 的測試中修復。作者:wangzk.fnstxz@fujitsu.com 討論:https://postgr.es/m/OSZPR01MB6551FFAC1088C82C3D799BE0FAEB9@OSZPR01MB6551.jpnprd01.prod.outlook.com 回溯修補到:14 https://git.postgresql.org/pg/commitdiff/fcf4c0ae1db8594cf3d3e84d2564616497eecd5a
Amit Kapila 推送
重構以建立 proto.c 和 worker.c 中的通用函數。這是一個非功能性的更改,僅用於重構程式碼以將一些複製邏輯提取到靜態函數中。這是為 2PC 流式傳輸修補程式做準備,該修補程式也共享此通用邏輯。作者:Peter Smith 審閱者:Amit Kapila 討論:https://postgr.es/m/CAHut+PuiSA8AiLcE2N5StzSKs46SQEP_vDOUD5fX2XCVtfZ7mQ@mail.gmail.com https://git.postgresql.org/pg/commitdiff/91f9861242cd7dcf28fae216b1d8b47551c9159d
移除 apply_handle_commit_internal() 中未使用的參數。提交 0926e96c49 中的疏忽。作者:Masahiko Sawada 審閱者:Amit Kapila 回溯修補到:14,引入該問題的版本 討論:https://postgr.es/m/CAD21AoDeScrsHhLyEPYqN3sydg6PxAPVBboK=30xJfUVihNZDA@mail.gmail.com https://git.postgresql.org/pg/commitdiff/16bd4becee32240d09db5c6cbec87957fdfcd2d9
Etsuro Fujita 推送
Heikki Linnakangas 推送
更新仍然引用 CheckpointLock 的過時註解。CheckpointLock 已在提交 d18e75664a 中移除,且提交 ce197e91d0 更新了 CreateCheckPoint 中剩餘的一個註解,但在 CreateRestartPoint 中還有另一個副本。https://git.postgresql.org/pg/commitdiff/df9f0c716cc75d9842b3de79159b9191c108987c
開啟訊號檔案以 fsync 它時,不要使用 O_SYNC 或類似的選項。當我們在檔案上呼叫 pg_fsync() 時,不需要使用 get_sync_bit()。我們沒有寫入檔案,因此實際上沒有任何區別,但這樣看起來比較不令人意外。審閱人:Andres Freund 討論:https://postgres.tw/message-id/b3b71061-4919-e882-4857-27e370ab134a%40iki.fi https://git.postgresql.org/pg/commitdiff/e9f5a0681cb9cf74b4c1c98e10182ccce04aa08c
移除不必要的 'restoredFromArchive' 全域變數。它可能對除錯很有用,但沒關係。有 'readSource',它幾乎做同樣的事情。審閱人:Andres Freund 討論:https://postgres.tw/message-id/b3b71061-4919-e882-4857-27e370ab134a%40iki.fi https://git.postgresql.org/pg/commitdiff/6b16532811f07fbb58e4b1b248775acbf9f732a2
將描述復原停止原因的程式碼提取到一個函數。StartupXLOG() 非常長,這使其更具可讀性。審閱人:Andres Freund 討論:https://postgres.tw/message-id/b3b71061-4919-e882-4857-27e370ab134a%40iki.fi https://git.postgresql.org/pg/commitdiff/4fe8dcdff3af73f6ca16eb3edfa3339c7ee0d2c4
將 InRecovery 和 standbyState 全域變數移動到 xlogutils.c。它們用於在正常操作期間和 WAL 重播期間運行的程式碼中,並且需要在重播期間表現不同。將它們移動到 xlogutils.c,因為我們在那裡有重做常式使用的其他輔助函數。審閱人:Andres Freund 討論:https://postgres.tw/message-id/b3b71061-4919-e882-4857-27e370ab134a%40iki.fi https://git.postgresql.org/pg/commitdiff/317632f3073fc06047a42075eb5e28a9577a4f96
Robert Haas 推送
Jeff Davis 推送
Bharath Rupireddy 發送了另一個修訂版的修補程式,以通過區分未記錄的表和臨時表的錯誤消息來改進發佈錯誤消息。
Daniel Gustafsson 發送了另一個修訂版的修補程式,以支持 NSS 作為 libpq TLS 後端。
David Fetter 和 Greg Nancarrow 交換了修補程式,以使用更少的指令來找到用於格式化的整數的小數位數。
John Naylor 發送了另一個兩個修訂版的修補程式,以添加驗證 UTF-8 文本的快速路徑。
Justin Pryzby 和 Bharath Rupireddy 交換了修補程式,以使其可以在啟動過程中記錄事件。
Haiying Tang 和 Vigneshwaran C 交換了修補程式,以將架構級別的粒度添加到 PUBLICATION。
Nathan Bossart 發送了另一個兩個修訂版的修補程式,以闡明 initdb --sync-only 幫助消息和文檔。
Amit Langote 發送了另一個修訂版的修補程式,以允許在跨分割區更新期間批次插入。
Andrey V. Lepikhov 發送了另一個修訂版的修補程式,以移除不需要的自我聯結。
David Rowley 發送了另一個修訂版的修補程式,將 ORDER BY 添加到某些遠端 SQL 查詢的 postgres_fdw。
Peter Smith 發送了另一個修訂版的修補程式,以添加邏輯複製的列篩選。
Daniel Westermann 發送了一個修補程式來修復錯字。
Amit Langote 發送了一個修補程式,在 src/backend/executor/nodeModifyTable.c:ExecInsert 中為計劃使用單獨的 tupledesc 結構。
Dagfinn Ilmari Mannsåker 發送了一個修補程式,通過禁止 void 上下文中的 map 和 grep 來符合 perlcritic。
Dipesh Pandit 發送了另一個修訂版的修補程式,以減輕 WAL 歸檔程式的效能降低目錄掃描問題。
Bertrand Drouvot 發送了另一個修訂版的修補程式,以使可以在備用伺服器上進行邏輯解碼。
Bharath Rupireddy 發送了另一個修訂版的修補程式,將 WaitLatch 用於 {pre, post}_auth_delay
。
Daniel Gustafsson 和 Jacob Champion 交換了修補程式,以重構 sslfiles Makefile 目標。
Bruce Momjian 發送了另一個四個修訂版的修補程式,以修復處理區間算術的一些問題。
Peter Smith 發送了另一個兩個修訂版的修補程式,以添加對流式傳輸交易的準備 API 支持。
Pavel Stěhule 發送了另一個修訂版的修補程式,以將 --options-file 選項和支持機制添加到 pg_dump。
Pavel Stěhule 發送了另一個修訂版的修補程式,以將篩選添加到 pg_dump。
Pavel Stěhule 發送了另一個修訂版的修補程式,以在 plpgsql 除錯 API 中傳回變數內容的文字值。
Michaël Paquier 發送了一個修補程式,以在 CREATE SEQUENCE 中記錄 RESTART,同時根據 START 描述其行為。
Daniel Gustafsson 發送了另一個修訂版的修補程式,以在後複製 errmsg 中發出命名空間。
Melanie Plageman 送出了一個補丁,用於 AIO bitmapheapscan 的 pgsr。
Yugo Nagata 送出 pgbench 補丁的另一個修訂版本,以防止它不必要地中止。
Amit Langote 送出另一個補丁修訂版本,以重新設計查詢關聯權限檢查,方法是將權限檢查資訊從範圍表條目移動到名為 RelPermissionInfo 的新節點類型,從而避免在範圍表中進行多次搜尋。
Ronan Dunklau 送出了一個補丁,添加了 READ_REPLICATION_SLOT 命令,該命令將在物理複製連線的上下文中使用,並在 pg_receivewal 中使用相同的方式來更好地估算所需的 start_lsn。
Daniil Zakhlystov 送出了一個補丁,添加 zlib 和 zstd 流壓縮,並在實作 libpq 壓縮時使用相同的方式。
Hayato Kuroda 送出了一個補丁,將本地 pid 添加到 fallback_application_name。
Masahiko Sawada 送出另兩個補丁修訂版本,將 errcontext 添加到應用邏輯複製變更時的錯誤中,添加 pg_stat_logical_replication_error 統計檢視,並向 ALTER SUBSCRIPTION 添加 skip_xid 選項。
Yura Sokolov 送出了一個補丁,將 integerset2 實作添加到 bdbench,旨在改善 lazy vacuum 的死亡元組儲存。
RGU 送出了一個補丁,用於收集子問題最頂層掃描/聯結關係的部分路徑。
Dean Rasheed 送出了一個補丁,以避免 to_char 中不正確的除以零錯誤。
Prabhat Sahu 送出了一個補丁,為 prohibit_wal 添加 TAP 測試。
John Naylor 送出另一個補丁修訂版本,以加速常見類型的元組排序。
Daniel Gustafsson 送出另一個補丁修訂版本,以修復 pg_basebackup 和 pg_dump 中的 sscanf 限制,並修復 TOC 檔案錯誤訊息列印中的錯誤,該錯誤表現為有時無法包含發生錯誤的檔案名稱。
Tomáš Vondra 送出另一個補丁修訂版本,以將序列上的操作添加到邏輯複製。
Melanie Plageman 送出另一個補丁修訂版本,以修復並行雜湊聯結批次清理中的競爭條件,闡明並行雜湊聯結階段的命名,並使在完整和右外部聯結上使用並行雜湊成為可能。
Hou Zhijie 送出了一個補丁,以刪除 maybe_send_schema 中未使用的參數。
David Rowley 和 Tomáš Vondra 交換了補丁,以使用生成上下文來加速元組排序。
Álvaro Herrera 送出另一個補丁修訂版本,以避免過早地建立歸檔狀態 ".ready" 檔案。
Heikki Linnakangas 送出另三個補丁修訂版本,以在 StartupXLOG() 中移動程式碼,將 xlog.c 分割成 xlog.c 和 xlogrecovery.c,並將應用一個 WAL 記錄的程式碼移動到子程序。
Ajin Cherian 送出了一個補丁,透過更改測試以使其等待兩個訂閱都趕上進度,然後再檢查準備好的事務計數,來修復 021_twophase tap 測試中可能發生的故障。
Gilles Darold 送出另一個補丁修訂版本,以添加函數 regexp_count、regexp_instr 和 regexp_like,並向 regexp_replace 和 regexp_substr 添加新參數,使其可以指定位置和出現次數。
Tomáš Vondra 送出另一個補丁修訂版本,以提高 slab allocator 的效能。
David Rowley 送出另一個補丁修訂版本,以在 RelOptInfo 中追蹤未修剪的分割區,並允許在更多情況下進行排序的分割區掃描。
Vigneshwaran C 送出另一個補丁修訂版本,以包含邏輯複製訊息格式文件中使用的實際資料類型。