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 中的問題。向後移植至: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 向後移植至: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 的支援。更改表存取方法的邏輯與更改 tablespace 或 relation persistence 的邏輯相似,都需要對變更的 relation 進行獨佔鎖定的重寫。ALTER TABLE 中執行的表重寫在掃描舊 relation 的元組並將其插入新 relation 時,已經通過表 AM 層,這使得此實現非常直接。請注意,不支援分割表,因為它們沒有定義存取方法。作者:Justin Pryzby, Jeff Davis 審閱者:Michael Paquier, Vignesh C 討論:https://postgr.es/m/20210228222530.GD20769@telsasoft.com https://git.postgresql.org/pg/commitdiff/b0483263dda0824cc49e3f8a022dab07e1cdf9a7
澄清一些使用leet(術語)"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 二進位檔的存在並報告錯誤,但它忘了正確 exit()。這可能導致報告令人困惑的錯誤。審閱者:Robert Haas, Fabien Coelho 討論:https://postgr.es/m/YQDMdB+B68yePFeT@paquier.xyz 向後移植至:13 https://git.postgresql.org/pg/commitdiff/2ad98fdf53edf1a90123e3b189cc6f0a31986891
在各種二進位檔的錯誤路徑中新增遺漏的 exit() 呼叫。執行以下變更:- 在 pg_archivecleanup 中,清除舊 WAL 區段時永遠不會立即失敗。- 在 pgbench 中,執行緒屏障的初始化不會硬性失敗。- 在 pg_recvlogical 中,stat() 失敗時從未呼叫 exit()。- 在 pg_basebackup 中,兩個 chmod() 報告了失敗,但未 exit() 解壓剛接收到的某些 tar 數據。此失敗後可能仍可繼續寫入某些數據,但最終可能會讓使用者感到困惑。這些可以說是錯誤,但它們發生在不太可能出錯的程式碼路徑中,因此不進行向後移植。審閱者: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 的新呼叫中使用 --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 停止建置農場運行,或在寫入壓縮 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 中添加的,但不太清楚該提交中的變更為何是必需的,因為 320c7eb8c(早於 18 個月)添加了將 fmgroids.h 複製到 src/include/utils 的程式碼。amcheck 似乎不需要額外的 include 目錄,因此 dblink 也許可以擺脫它。這在我的 VS2017 環境中建置正常,但建置農場可以提醒我們為何需要 ee3b4188a。只有一種方法可以確定。討論:https://postgr.es/m/CAApHDvpo6g5csCTjc_0C7DMvgFPomVb0Rh-AcW5afd=Ya=LRuw@mail.gmail.com https://git.postgresql.org/pg/commitdiff/4b763ff642e1a3608cbcaff062f6c2f465bfc6bd
doc:澄清 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' hash 和呼叫 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 建置腳本以解析 Makefile 中的定義。這將調整 MSVC 建置腳本,使其查看 Makefile 中提到的編譯旗標以尋找 -D 參數,從而確定 Visual Studio 建置中應定義哪些常量。此變更產生的一個小異常是 ltree 擴充功能的 Makefile 定義了 LOWER_NODE,但在 MSVC 建置腳本中沒有正確定義。這意味著與使用 make 建置環境相比,MSVC 建置在 ltree 模組中的大小寫敏感度將有所不同。為了維持這裡相同的行為,我們將 Makefile 中的 -DLOWER_NODE 移除,並僅在 ltree.h 中為非 MSVC 建置始終定義它。我們需要在此處維持舊的行為,因為這會影響 ltree 類型的 GiST 索引的磁碟兼容性。另一個結果是,autoinc、insert_username 和 moddatetime 擴充功能模組現在定義了 REFINT_VERBOSE。以前在 MSVC 中,這僅為 refint 模組定義。這使行為與使用 make 的建置環境保持一致,因為這四個模組共享相同的 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 的抵抗能力。建置農場尚未測試此功能,但很快將會更改。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()。據我所知,這不會引起任何問題。我們確實發現,如果試圖在全局範圍內改變這種行為,可能會引起問題,但只要 "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 的建置農場動物。我對 explain.sql 中的其他地方沒有出現這個問題感到驚訝,因此將其關閉,不僅針對那個新測試案例,而是針對整個測試腳本。根據建置農場的報告。 https://git.postgresql.org/pg/commitdiff/674f6fe8e65a37289432fa373e5d742a36751ae8
修復多範圍(multiranges)多型參數解析中的錯誤。我們未能處理 anycompatiblemultirange 的 UNKNOWN 類型輸入;這應該拋出一個錯誤,表明我們不知道如何解析多範圍類型。我們也未能從 anycompatiblerange 輸入推斷 anycompatiblerange 輸出的類型,反之亦然。根據 Alexander Lakhin 的錯誤 #17066。向後移植到添加多範圍的 v14。討論: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 情況。向後移植到 ffa2e4670 進入的 v14。原則上這可以追溯得更遠;但鑑於缺乏現場報告,舊分支中的危險似乎可以忽略不計。討論: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
doc:為「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 聲明情況確實如此。但我們已經收到幾份關於擴充功能測試未滿足此要求並因崩潰而感到困惑的報告。讓我們將 Assert 轉換為測試並 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
doc:在 9.7.3 中按字母順序排列 regexp_foo() 函數描述。沒有明顯的原因(除了歷史意外),regexp_replace() 的順序不對。重新排序以匹配它們在 9.4 中列出的方式。(這意味著 substring() 仍然是第一個,因為它是 SQL 標準,而其他則不是。)除了移動它之外,我沒有觸及文本。這只是為了減少即將添加內容的 diff 中的混亂。 https://git.postgresql.org/pg/commitdiff/64a1f225654f8866422010ff28e0d3384ae4c3af
Dean Rasheed 已推送
允許數值精度(scale)為負或大於精度(precision)。先前,在指定 NUMERIC(precision, scale) 時,scale 必須在 [0, precision] 範圍內,這符合 SQL 規範。此提交將允許的 scale 範圍擴展到 [-1000, 1000],獨立於 precision(precision 的有效範圍仍然是 [1, 1000])。負 scale 暗示在小數點前捨入。例如,一個欄位可能聲明為 scale -3,以四捨五入到最接近的千。請注意,顯示 scale 仍然是非負的,因此在此情況下顯示 scale 為零,並且將顯示小數點前的所有數字。大於 precision 的 scale 支持帶有小數點後零的分數值。藉此機會整理打包、解包和驗證 typmod 整數內容的程式碼,並將其封裝在一組新的內聯函數中。由於 numeric 欄位的 atttypmod 的允許內容已更改,因此增加 catversion。這不是一個需要 re-initdb 的變更,但 typmod 中的負 scale 值會讓舊後端感到困惑。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 抱怨我的提交 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 中設置,但移除行時不會呼叫它。已修復。(參考:提交 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
關閉複製槽測試程式碼中的又一個競態條件。建置農場顯示此測試在檢查點比預期更早開始時還有進一步的失敗模式,因此我們檢測到一個「檢查點已完成」的行,但不是我們想要的。更改配置以盡量防止此情況。根據建置農場的要求。同時,更新了提交 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 億。然而,這會導致伺服器立即掃描所有 relation 的 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:針對各種子字串函數,記錄是否僅匹配第一個。報告者: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 腳本中的命令 echo。這使它們更像 Unix 等效腳本。討論:https://postgr.es/m/73deed30-3363-44e9-48a5-98aa66a8a00f@dunslane.net https://git.postgresql.org/pg/commitdiff/91d76613b7ec75b6642accaff91dc7d657e549e9
在 PostgresNode 中將 -w 加回到 pg_ctl (re)start 的標誌中。這現在是 pg_ctl 的預設行為,但明確保留該標誌不會造成危害,並且有助於 PostgresNode 模組的向後兼容性。 https://git.postgresql.org/pg/commitdiff/b33259e261ae99dc7c503a6a7615bd492047588b
向 PostgresNode 添加 adjust_conf 方法。此方法將修改或刪除配置檔中現有的行,而不是僅將其追加到檔案中。這使得調整舊版本檔案的過程更加簡單和緊湊。 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 安裝路徑的 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 上對符號連結目錄使用 perl2host。某些版本的 msys2/Windows 已觀察到 perl2host 解析符號連結而不是僅跟隨它們。這會破壞使用符號連結的較短路徑到較長路徑,並導致某些測試失敗。因此,我們在符號連結的父目錄上呼叫 perl2host,然後僅使用該結果。應用於已觀察到問題的 release 14。 https://git.postgresql.org/pg/commitdiff/b35a67bc04243da609843949c53e6841e748243a
使 TestLib::perl2host 更一致且更強健。有時 cygpath 會返回帶有尾隨斜線的路徑。這可能會導致問題。另外,使「cygpath」的使用與「pwd -W」在正斜線使用方面保持一致。向後移植到引入當前程式碼的 release 14。 https://git.postgresql.org/pg/commitdiff/bad106752272c05de5a56036b8a84ae6ff3249a0
抑制關於未初始化值的 Perl 警告。 https://git.postgresql.org/pg/commitdiff/0d1401931868e03342ed4689b5af2522eb40f750
Fujii Masao 提交
避免在錯誤訊息中使用含糊不清的詞語「非負數」。使用「非負數」的錯誤訊息令人困惑,因為它不明確是否接受零。此提交通過用「大於零」或「大於或等於零」等不太含糊的詞語替換它們來改進這些錯誤訊息。此外,此提交還將關於「非負數」的說明添加到錯誤訊息風格指南中,以幫助編寫新的錯誤訊息。當 postgres_fdw 選項 fetch_size 設定為零時,先前報告的錯誤訊息為「fetch_size 需要一個非負整數值」。這個錯誤訊息顯然是錯誤的。因此,向所有可能引發這種錯誤訊息的受支援版本進行向後移植。報告者: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://postgresql.ac.cn/message-id/CAKpL73vZmLuFVuwF26FJ%2BNk11PVHhAnQRoREFcA03x7znRoFvA%40mail.gmail.com 向後移植到 v14 https://git.postgresql.org/pg/commitdiff/3ba70d4e152372fd8ab90ed0887ee08d505ef306
修復 ECPG 的 numeric 到 int 轉換中的範圍檢查。以前的程式碼保護了 -INT_MAX 而不是 INT_MIN,導致 -2147483648 被拒絕為超出範圍。根據 Kevin Sweet 的錯誤 #17128 討論:https://postgresql.ac.cn/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://postgresql.ac.cn/message-id/b3b71061-4919-e882-4857-27e370ab134a%40iki.fi https://git.postgresql.org/pg/commitdiff/e9f5a0681cb9cf74b4c1c98e10182ccce04aa08c
移除不必要的 'restoredFromArchive' 全域變數。它可能對調試有用,但沒什麼大不了的。有 'readSource' 做了幾乎相同的事情。審閱者:Andres Freund 討論:https://postgresql.ac.cn/message-id/b3b71061-4919-e882-4857-27e370ab134a%40iki.fi https://git.postgresql.org/pg/commitdiff/6b16532811f07fbb58e4b1b248775acbf9f732a2
將恢復停止原因的描述提取到一個函數中。StartupXLOG() 非常長,這使其稍微更具可讀性。審閱者:Andres Freund 討論:https://postgresql.ac.cn/message-id/b3b71061-4919-e882-4857-27e370ab134a%40iki.fi https://git.postgresql.org/pg/commitdiff/4fe8dcdff3af73f6ca16eb3edfa3339c7ee0d2c4
將 InRecovery 和 standbyState 全域變數移至 xlogutils.c。它們在正常操作和 WAL 重放期間都使用的程式碼中,並且在重放期間需要不同的行為。將它們移至 xlogutils.c,因為那裡還有其他供 redo 例程使用的輔助函數。審閱者:Andres Freund 討論:https://postgresql.ac.cn/message-id/b3b71061-4919-e882-4857-27e370ab134a%40iki.fi https://git.postgresql.org/pg/commitdiff/317632f3073fc06047a42075eb5e28a9577a4f96
Robert Haas 提交
Jeff Davis 推送
Bharath Rupireddy 送來了另一份補丁修訂,用於改進 publication 錯誤訊息,區分未記錄表和臨時表的錯誤訊息。
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 送來了另一份補丁修訂,用於在 postgres_fdw 中為一些遠端 SQL 查詢添加 ORDER BY。
Peter Smith 送來了另一份補丁修訂,用於為邏輯複製添加行過濾。
Daniel Westermann 送來了一個修復拼寫錯誤的補丁。
Amit Langote 送來了一個補丁,用於在 src/backend/executor/nodeModifyTable.c:ExecInsert 中為計畫使用單獨的 tupledesc 結構。
Dagfinn Ilmari Mannsåker 送來了一個補丁,以符合 perlcritic 的要求,禁止在 void 上下文中 Map 和 grep。
Dipesh Pandit 送來了另一份補丁修訂,以減輕 WAL 歸檔器進行目錄掃描導致的性能問題。
Bertrand Drouvot 送來了另一份補丁修訂,以使備用伺服器能夠進行邏輯解碼。
Bharath Rupireddy 送來了另一份補丁修訂,用於為 `{pre, post}_auth_delay` 使用 WaitLatch。
Daniel Gustafsson 和 Jacob Champion 交換了補丁,以重構 sslfiles Makefile 目標。
Bruce Momjian 送來了四份補丁修訂,以修復 interval 算術處理中的一些問題。
Peter Smith 送來了另外兩份補丁修訂,以添加流式事務的 prepare API 支持。
Pavel Stěhule 送來了另一份補丁修訂,為 pg_dump 添加了 `--options-file` 選項和支持的機制。
Pavel Stěhule 送來了另一份補丁修訂,為 pg_dump 添加了過濾功能。
Pavel Stěhule 送來了另一份補丁修訂,以在 plpgsql 調試 API 中返回變數內容的文本值。
Michaël Paquier 送來了一個補丁,記錄 CREATE SEQUENCE 中的 RESTART,同時描述其行為與 START 一致。
Daniel Gustafsson 送來了另一份補丁修訂,以在 post-copy errmsg 中輸出命名空間。
Melanie Plageman 送來了一個補丁,用於 AIO bitmapheapscan 的 pgsr。
Yugo Nagata 送來了另一份補丁修訂,用於 pgbench,以防止其不必要地中止。
Amit Langote 送來了另一份補丁修訂,用於重構查詢關係權限檢查,將權限檢查信息從 range table 條目移動到名為 RelPermissionInfo 的新節點類型,從而避免了多次搜索 range tables。
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 送來了一個補丁,向 bdbench 添加了 integerset2 實現,旨在改善惰性 vacuum 的死元組存儲。
RGU 送來了一個補丁,用於收集子問題頂層 scan/join rel 的部分路徑。
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 交換了補丁,以使用生成上下文來加速 tuplesorts。
Álvaro Herrera 送來了另一份補丁修訂,以避免過早創建 archive status ".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 分配器的性能。
David Rowley 送來了另一份補丁修訂,用於在 RelOptInfo 中追蹤未剪除的分區,並在更多情況下允許有序分區掃描。
Vigneshwaran C 送來了另一份補丁修訂,在邏輯複製消息格式文檔中包含實際使用的數據類型。