安全性版本 13.3、12.7、11.12、10.17 和 9.6.22 已發布。請儘快升級。9.6 系列將於 2021 年 11 月 11 日停止接收修復。現在規劃主要版本升級。https://postgres.tw/about/news/postgresql-133-127-1112-1017-and-9622-released-2210/
本週人物:https://postgresql.life/post/laurenz_albe/
https://archives.postgresql.org/pgsql-jobs/2021-05/
Planet PostgreSQL: https://planet.postgresql.org/
本週的 PostgreSQL Weekly News 由 David Fetter 帶給您
請在太平洋標準時間/太平洋夏令時間週日下午 3:00 前將新聞和公告提交至 david@fetter.org。
Tom Lane 推送了
改進 pg_config_manual.h 中關於 USE_VALGRIND 的註解。這些註解給人一種印象,認為 USE_VALGRIND 對於 valgrind 測試來說並非真正必要。但這是錯誤的,正如我今天慘痛地學到的。討論:https://postgr.es/m/512778.1620588546@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/8dc3d68cbe676deb5e74d1b1b565f57fffaf107e
防止陣列下標計算中的整數溢位。雖然我們(大多)小心確保陣列的維度不夠大以至於導致整數溢位,但通常不檢查下限值。這會導致 lower_bound + dimension 溢位整數的情況。就陣列讀取而言,這似乎是無害的,除了下標名義上超過 INT_MAX 的陣列元素無法存取。但是,它會混淆各種陣列分配邏輯,從而導致記憶體踩踏的潛在可能。通過添加檢查來修復,確保陣列下限不夠大,以至於導致 lower_bound + dimension 溢位。(注意:這會導致不允許最後一個下標位置恰好為 INT_MAX 的情況。原則上,我們或許可以允許這種情況,但有很多計算 lower_bound + dimension 的程式碼需要調整。允許它似乎不值得麻煩/冒險。)在某種程度上獨立於此,array_set_element() 在檢查固定長度陣列的下標時,對可能的溢位粗心大意,從而創建了另一條記憶體踩踏的途徑。也修復了該問題。安全性:CVE-2021-32027 https://git.postgresql.org/pg/commitdiff/f02b9085ad2f6fefd9c5cdf85579cb9f0ff0f0ea
修復 ON CONFLICT ... UPDATE tlists 中對 resjunk 欄位的錯誤處理。在 ON CONFLICT ... UPDATE 列表中擁有任何 resjunk 欄位是不常見的,但是當存在 MULTIEXPR_SUBLINK SubPlan 時,可能會發生這種情況。如果發生這種情況,ON CONFLICT UPDATE 程式碼路徑最終會儲存包含額外 resjunk 欄位值的元組。在短期內,這相當無害,但是如果將新欄位添加到表中,則這些值將變得可存取,如果它們與新欄位的資料類型不符,則可能會導致故障。由於缺少健全性檢查的影響,這沒有引起注意,其中包括:*
沒有交叉檢查提供給 heap_insert 或 heap_update 的元組是否與表格列類型匹配。雖然以合理的成本完全檢查它很困難,但是我們可以輕鬆地添加斷言,表明沒有太多的欄位。*
execExprInterp.c 中的輸出欄位分配案例缺少對輸出欄位號碼的任何健全性檢查,考慮到對輸入欄位號碼進行了大量的斷言檢查,這似乎是一個疏忽。也在那裡添加斷言。*
我們未能將 nodeModifyTable 的 ExecCheckPlanOutput() 應用於 ON CONFLICT UPDATE tlist。這不會捕獲這個特定的錯誤,因為該函數被指定為忽略 resjunk 欄位;但是現在我們已經看到了這個錯誤,這似乎是一個糟糕的疏忽。在 HEAD 中,修復此問題的正確方法是使 ON CONFLICT UPDATE tlists 的處理方式與現在的常規 UPDATE tlists 相同,即不添加「SET x = x」條目,並使用 ExecBuildUpdateProjection 來評估 tlist 並將其與未設定欄位的舊值組合。這為 ExecBuildUpdateProjection 增加了一些複雜性,但允許從規劃器中刪除相當數量的現在已失效的程式碼。在後端分支中,最方便的解決方案似乎是 (a) 為實際匹配目標表格的 ON CONFLICT UPDATE 投影使用輸出槽,然後 (b) 發明 ExecBuildProjectionInfo 的變體,該變體可以被告知不儲存由 resjunk 欄位產生的值,因此它不會嘗試儲存到輸出槽的不存在的欄位中。(我們不能簡單地完全忽略 resjunk 欄位;必須對它們進行評估才能使 MULTIEXPR_SUBLINK 工作。)這適用於 v10。在 9.6 中,投影的工作方式大相逕庭,我們無法以較低的成本為它們提供這樣的選項。此修補程式的 9.6 版本通過在需要刪除 resjunk 欄位時插入 JunkFilter 來工作。此外,當嘗試在分割表格上執行 ON CONFLICT UPDATE 時,v11 及更高版本存在相反的問題。通過進一步的疏忽,adjust_partition_tlist() 在重新排序 ON CONFLICT UPDATE tlist 以匹配分割時丟棄了 resjunk 欄位。這意外地阻止了儲存虛假元組的問題,但代價是 MULTIEXPR_SUBLINK 案例不起作用,如果必須更新多個列,通常會崩潰。通過在該常式中保留 resjunk 欄位來修復。 (我未能抵禦在那裡添加更多斷言以及進行一些小的程式碼美化的誘惑。)根據 Andres Freund 的報告。向所有支援的分支進行回溯修補。安全性:CVE-2021-32028 https://git.postgresql.org/pg/commitdiff/049e1e2edb06854d7cd9460c22516efaa165fbf8
用 C 程式碼替換 opr_sanity 測試的 binary_coercible() 函數。opr_sanity 的 binary_coercible() 函數一直旨在匹配剖析器對二進制強制轉換的概念,但它也一直是非常糟糕的剖析器實際規則的近似值(如 IsBinaryCoercible() 中所體現的)。到目前為止,這還沒有困擾我們,但是可以預見它最終會困擾我們。現在還出現了在 clobber-cache-always 測試中,以 plpgsql 實現此檢查的效能絕對糟糕。(或許我們可以對此做些什麼,但是我懷疑這只是意味著 plpgsql 正在最大限度地利用目錄緩存。)因此,讓我們用 C 填充程式替換 binary_coercible(),該填充程式直接調用 IsBinaryCoercible(),從而消除語義風險和效能問題。regress.c 的大多數 C 函數都在 create_function_1 中宣告,但是我們不能簡單地將其移動到 opr_sanity/type_sanity 之前,因為這些測試會抱怨由此產生的 shell 類型。我選擇將其拆分為 create_function_0 和 create_function_1。由於 create_function_0 現在作為並行組的一部分執行,而 create_function_1 不執行,因此將後者簡化為僅建立 opr_sanity 和 type_sanity 會抱怨的那些函數。為了在第二個並行測試組中為 create_function_0 騰出空間,請將 tstypes 移動到第三個並行組。順便說一句,清理 parallel_schedule 和 serial_schedule 之間的一些排序偏差。討論:https://postgr.es/m/292305.1620503097@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/6303a5730914dfe6ef2709b28b225553315c573c
移除個別的 serial_schedule 測試清單。維護兩份迴歸測試腳本清單已被證明容易出錯且令人煩惱。我們可以透過使用 "--max_connections=1" 執行 parallel_schedule 來達到 serial_schedule 的效果;所以執行此操作並移除 serial_schedule。這會導致進度輸出的外觀差異,但似乎不值得為了避免這種情況而重構 pg_regress。討論:https://postgr.es/m/899209.1620759506@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/1df3555acc78dedc3ca25eb5e83649b3da1f298f
修正 vcregress.pl 中 "--max-connections" 的古老拼寫錯誤。我複製了現有的拼寫 "--max_connections",但那是錯誤的 :-(。顯然,在這個腳本中設定 $ENV{MAX_CONNECTIONS} 從未真正起作用過。鑑於沒有人抱怨,可能不值得回溯修補程式。依照建置農場 (buildfarm)。討論:https://postgr.es/m/899209.1620759506@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/0b85fa93e4575183aa5a71ebe3c6bae8d97704ed
在 CLOBBER_CACHE_ALWAYS 模式下縮短 privileges.sql 測試的執行時間。 privileges 迴歸測試中的幾個查詢導致規劃器將 plpgsql 函數 "leak()" 應用於 atest12.b 直方圖的每個元素。由於 commit 0c882e52a 將該直方圖的大小增加到 10000 個條目,因此該測試調用了該函數超過 100000 次,這在 clobber-cache-always 模式下花費了絕對不合理的時間。但是,沒有真正的理由說明它必須是一個 plpgsql 函數:就此測試而言,重要的是它沒有被標記為 leakproof。因此,我們可以將 plpgsql 實作替換為直接呼叫 int4lt,它具有相同的行為並且速度快幾個數量級。預計這將減少 CCA 動物的建置農場週期時間數小時。它在正常的建置中也有一些積極的影響,儘管這可能在雜訊中消失。回溯修補到 v13,其中 0c882e52a 引入。討論:https://postgr.es/m/575884.1620626638@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/e135743ef07ea59088d09c459f41ee2eaabe95c3
v14 的初始 pgindent 和 pgperltidy 執行。還有 "make reformat-dat-files"。唯一值得注意的更改是 pgindent 搞砸了 launcher.c 的 struct LogicalRepWorkerId 的格式,這讓我注意到該結構已不再使用,所以我直接將它刪除了。https://git.postgresql.org/pg/commitdiff/def5b065ff22a16a80084587613599fe15627213
對目錄資料執行預先發布的整理。執行 renumber_oids.pl 以向下移動高編號的 OID,如 RELEASE_CHANGES 指定的預先 beta 任務。作為參考,該命令是 ./renumber_oids.pl --first-mapped-oid 8000 --target-oid 6150 https://git.postgresql.org/pg/commitdiff/14472442861ca95cc9158518acdedf740c4bff55
文件:更新 bki.sgml 關於 OID 範圍的敘述。Commit ab596105b 忽略了使文檔與代碼相符。https://git.postgresql.org/pg/commitdiff/1f9b0e6938054515b8c9df545437c3d347eed683
在 system_constraints.sql/system_functions.sql 中使用雙倍空格分隔指令。 之前,後端在讀取 system_constraints.sql 時報告的任何錯誤都會報告整個文件,而不僅僅是它正在處理的特定指令。(問我怎麼知道的。)同樣,會有 system_functions.sql 的一些區塊會被讀取為一個指令,如果那裡發生任何錯誤,那將會很煩人。system_constraints.sql 的問題是 commit dfb75e478 的疏忽。 我沒有嘗試追蹤 system_functions.sql 中格式不良的開始位置,但它肯定與該文件開頭的建議相反。https://git.postgresql.org/pg/commitdiff/7dde98728a2ef6d48ef397ee783dd130fdb34e6b
重構 CHECK_FOR_INTERRUPTS() 以增加靈活性。 分割 CHECK_FOR_INTERRUPTS() 以提供一個額外的巨集 INTERRUPTS_PENDING_CONDITION(),它只測試是否有中斷掛起,而不嘗試服務它。 這在呼叫者知道中斷被阻塞的情況下很有用,並且想知道是否值得取消阻塞它們。 另新增 INTERRUPTS_CAN_BE_PROCESSED(),它指示是否可以依賴 CHECK_FOR_INTERRUPTS() 來清除掛起的中斷。 此 commit 實際上沒有添加任何新巨集的使用,但後續的錯誤修復將會這樣做。 回溯修補到所有支援的分支,以提供該修復的基礎架構。Alvaro Herrera 和 Tom Lane 討論:https://postgr.es/m/20210513155351.GA7848@alvherre.pgsql https://git.postgresql.org/pg/commitdiff/e47f93f981ccb70b4c4c5a0966e5fa0400e11a7e
修復 spgdoinsert() 中的查詢取消處理。 知道有缺陷的 opclass 可能會導致無限插入迴圈,spgdoinsert() 旨在允許查詢取消來中斷其迴圈。 然而,這實際上從未起作用,因為在第一次迭代之後的迭代中,我們將持有緩衝區鎖定,這將導致 InterruptHoldoffCount 為正,從而阻止中斷服務。 為了修復,請檢查是否有中斷掛起,如果有,則跳出插入迴圈,並在釋放緩衝區後為中斷提供服務。 如果它確實是一個查詢取消,那麼這件事就結束了。 如果它是一個非取消中斷的原因,請利用現有條款來重試整個插入。(這並不像看起來那麼浪費,因為我們已經建立的任何上層索引元組都應該可以在下次嘗試中使用。) 雖然現有的發佈分支中沒有已知的此類錯誤實例,但將其回溯修補到所有支援的分支仍然是一個好主意,因為如果確實發生迴圈,行為相當糟糕 --- 不僅不可取消,而且會迅速消耗記憶體,直至出現 OOM 故障。 無論如何,此代碼肯定沒有按預期工作。 根據 Dilip Kumar 的報告。 討論:https://postgr.es/m/CAFiTN-uxP_soPhVG840tRMQTBmtA_f_Y8N51G7DKYYqDh7XN-A@mail.gmail.com https://git.postgresql.org/pg/commitdiff/eb7a6b9229432dcb791f4bf0c44fe97bab661134
防止 spgdoinsert() 中發生無限插入迴圈。過去,我們僅依賴於宣告 longValuesOK 的運算子類別,最終會縮短葉節點的值,使其能符合索引頁面的大小。但自從引入 INCLUDE 欄位支援 (commit 09c1c6ab4) 後,這種方式就失效了,因為光是 INCLUDE 欄位就可能佔用超過一個頁面的空間,這表示無論如何壓縮葉節點資料都無法完成任務。至少對於 spgtextproc.c 來說,這會導致無限迴圈,因為 spgtextproc.c 無法在無法再縮短葉節點資料時拋出錯誤。為了修正此問題,同時又不影響原本可以正常運作的情況,我們在 spgdoinsert() 中添加了邏輯,以驗證每次「選擇」步驟後,葉節點的 tuple 大小是否正在減少。某些運算子類別可能不會在每個週期都減少大小,而且在任何情況下,tuple 大小的對齊進位都可能會掩蓋掉微小的減少量。因此,我們允許最多 10 個週期沒有額外的節省,然後才拋出錯誤。(這個數字可能需要調整,但目前看來相當寬裕。)既然我們已經開發了這個邏輯,就讓我們將它回溯修補。回溯分支沒有 INCLUDE 欄位需要擔心,但這似乎是對抗運算子類別中可能存在的錯誤的好方法。我們已經知道此處的無限迴圈非常令人不愉快,因此擁有防禦機制似乎比破壞東西的風險更重要。(請注意,spgtextproc.c 實際上是唯一已知的具有 longValuesOK 支援的運算子類別,因此無論如何,對於已知的非核心運算子類別來說,這一切都是沒有意義的。)根據 Dilip Kumar 的報告。討論:https://postgr.es/m/CAFiTN-uxP_soPhVG840tRMQTBmtA_f_Y8N51G7DKYYqDh7XN-A@mail.gmail.com https://git.postgresql.org/pg/commitdiff/c3c35a733c77b298d3cf7e7de2eeb4aea540a631
在釋放 BackgroundWorkerSlots 時,更加注意障礙 (barriers)。ForgetBackgroundWorker 完全沒有任何記憶體障礙,而 BackgroundWorkerStateChange 有一個,但在障礙之後卻無法解釋地對 slot->in_use 進行了額外的操作。AFAICS,規則必須是障礙緊接在設定或清除 slot->in_use 之前。看起來早在 9.6 撰寫 ForgetBackgroundWorker 時,可能存在一些不需要障礙的情況,但我對此不太相信 --- bgw_notify_pid 的載入在呼叫者中似乎不能保證沒有記憶體排序問題。所以也修補 9.6。很可能這不能修復 Intel 硬體上的任何可觀察到的錯誤,但具有較弱記憶體排序規則的機器可能會在此處遇到問題。討論:https://postgr.es/m/4046084.1620244003@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/30d8bad494ad1f604295033e4f4de4b8f258fe74
Michaël Paquier 推出了
文件:修正一些與 LZ4 相關的文件中的間隙。上游專案的正式名稱為 "LZ4",並且該文件與可用於支援此選項的 DDL 的選項值以及專案名稱混淆了。遺漏了與設定選項 --with-lz4 相關的文件,因此為此添加了一些內容。作者:Dilip Kumar, Michael Paquier。審閱人:Justin Pryzby。討論:https://postgr.es/m/YJaOZQDXBVySq+Cc@paquier.xyz https://git.postgresql.org/pg/commitdiff/02a93e7ef9612788081ef07ea1bbd0a8cc99ae99
為具有屬性壓縮的 pg_dump 添加更多 TAP 測試。主迴歸測試套件中留下了一些將 LZ4 用作 toast 壓縮方法的關係,以強調 pg_upgrade,但是 pg_dump(包括在產生的輸出方面更加挑剔的測試)沒有此功能的實際覆蓋率。與排序規則類似,僅適用於 LZ4 的測試會使用額外的標誌進行追蹤,並且這使用 TestLib::check_pg_config() 來檢查建置是否支援 LZ4。這強調了表、具體化視圖和 pg_dump --no-toast-compression 的更多情境。作者:Dilip Kumar。審閱人:Michael Paquier。討論:https://postgr.es/m/CAFiTN-twgPmohG7qj1HXhySq16h123y5OowsQR+5h1YeZE9fmQ@mail.gmail.com https://git.postgresql.org/pg/commitdiff/63db0ac3f9e6bae313da67f640c95c0045b7f0ee
修正發行 tarball 的 ./INSTALL 的產生。"make dist" 負責建立發行 tarball,當嘗試產生 ./INSTALL 時失敗,因為添加到安裝詳細資訊文件的 guc-default-toast-compression 的新參考未正確轉換為純文字。與此頁面上的所有其他連結參考一樣,這會向 standalone-profile.xsl 添加一個新條目,以允許正確完成 ./INSTALL 的產生。在 02a93e7 中的疏忽,根據 buildfarm 成員 guaibasaurus。 https://git.postgresql.org/pg/commitdiff/45aa88fe1d4028ea50ba7d26d390223b6ef78acc
修正 operatorcmds.c 中的錯字。作者:Kyotaro Horiguchi, Justin Pryzby。討論:https://postgr.es/m/20210428.173633.1525059946206239295.horikyota.ntt@gmail.com https://git.postgresql.org/pg/commitdiff/829daab4bbe356a2f9ae0b2ee0fc98bc2279d754
在 MSVC 腳本中添加對 LZ4 建置的支援。自從在 bbe0a81 中引入以來,表資料的壓縮支援 LZ4,但是 MSVC 腳本中沒有做任何事情來允許使用者使用此函式庫建置程式碼。此提交透過擴展 MSVC 腳本以能夠選擇性地使用 LZ4 進行建置來彌合差距。可以獲得可用於編譯和執行的函式庫,因為可以使用其原始碼 tarball 將 LZ4 編譯到 MSVC 2010。MinGW 可能需要額外的努力才能工作,我只能使用 MSVC 測試這個,但這仍然比沒有好,可以讓使用者測試 Windows 上的功能。作者:Dilip Kumar。審閱人:Michael Paquier。討論:https://postgr.es/m/YJPdNeF68XpwDDki@paquier.xyz https://git.postgresql.org/pg/commitdiff/9ca40dcd4d0cad43d95a9a253fafaa9a9ba7de24
簡化 pg_subscription.c 中 ScanKey 的一種用法。負責傳回與訂閱相關聯的所有關係的程式碼部分只需要一個 ScanKey,但分配了兩個。此程式碼由 7c4f524 從同一檔案的不同區域複製貼上而引入,使結果令人難以理解。作者:Peter Smith。審閱人:Tom Lane, Julien Rouhaud, Bharath Rupireddy。討論:https://postgr.es/m/CAHut+PsLKe+rN3FjchoJsd76rx2aMsFTB7CTFxRgUP05p=kcpQ@mail.gmail.com https://git.postgresql.org/pg/commitdiff/e6ccd1ce1644d1b40b7981f8bc172394de524f99
使 psql 中 INSERT 和 DELETE 的 tab 補全更加合理。當直接指定為 DML 查詢時,INSERT 並非總是補全為 "INSERT INTO",DELETE 也與 "DELETE FROM" 相同。這使得兩個命令的補全行為更加一致,從而節省了一些按鍵次數。策略、觸發器、授權/撤銷等命令只需要 DELETE 作為補全關鍵字。作者:Haiying Tang。審閱人:Dilip Kumar, Julien Rouhaud。討論:https://postgr.es/m/OS0PR01MB61135AE2B07CCD1AB8C6A0F6FB549@OS0PR01MB6113.jpnprd01.prod.outlook.com https://git.postgresql.org/pg/commitdiff/1906cc07d90a8e58fd381dba43c1085e9231f236
Thomas Munro 推出了
Bruce Momjian 推送了
doc: PG 14 發行說明的第一個草稿。 https://git.postgresql.org/pg/commitdiff/dc0260861063b125d297c0f3caca359feb381c6a
doc: 根據目前的回饋更新 PG 14 發行說明。 https://git.postgresql.org/pg/commitdiff/ff51679220ce31091bfdbc96d2e90fc02ac6f329
doc: 根據回饋更新 PG 14 發行說明。 https://git.postgresql.org/pg/commitdiff/5b2d09beaffa915edd6e74fcf030b13844d3326f
doc: 根據目前的回饋更新 PG 14 發行說明。 https://git.postgresql.org/pg/commitdiff/b35f827b68dc1e761e17f621fbf17c3ecd073cb0
doc: PG 14 發行說明,調整分割區上的更新/刪除操作。 https://git.postgresql.org/pg/commitdiff/b2d0c7c96711843c6e47fce71335d43127f81647
doc: PG 14 發行說明,依照重要性重新排序項目。 https://git.postgresql.org/pg/commitdiff/521d08a21a2b1ba7038ccc815b8bccc3c9be1351
doc: 使用最近的回饋更新 PG 14 發行說明。 Reported-by: Justin Pryzby Discussion: https://postgr.es/m/20210514020141.GQ27406@telsasoft.com https://git.postgresql.org/pg/commitdiff/5eb1b27d20670b378508391fab01a6871a86a8e9
doc: 更新 PG 14 發行說明以反映 compute_query_id 的變更。同時移除 ALTER TYPE ...SUBSCRIPT,並更新至所有目前的提交。 https://git.postgresql.org/pg/commitdiff/6cb5346cb15d56e6ba8288b891c7098f0aecdadc
doc: 移除 compute_query_id PG14 rel 文字周圍的 XML 註解。 https://git.postgresql.org/pg/commitdiff/f39b21e6a25c7269f50a709aa874e321e6f84b20
Peter Eisentraut 推送了
移除未使用的函數參數。 原始提交 198b3716dba68544b55cb97bd120738a86d5df2d 中存在,但顯然從未使用過。 https://git.postgresql.org/pg/commitdiff/3c554100307f4e57c0881e205dbdbc173bb84d56
為 probes.d 探針發出虛擬語句(當停用時)。當建置時未使用 --enable-dtrace,為 stubbed-out 的 TRACE_POSTGRESQL_foo() 巨集發出虛擬 do {} while (0) 語句,而不是完全省略原始探針語句的空巨集。 這修正了 b94409a02f 引入的警告:建議在 ‘if’ 語句的空主體周圍加上大括號 [-Wempty-body]。 Author: Craig Ringer craig.ringer@2ndquadrant.com Discussion: https://postgres.tw/message-id/flat/20210504221531.cfvpmmdfsou6eitb%40alap3.anarazel.de https://git.postgresql.org/pg/commitdiff/fa8fbadb934b4727a7aeff074995e799f4685a75
翻譯更新。 Source-Git-URL: git://git.postgresql.org/git/pgtranslation/messages.git Source-Git-Hash: 1c361d3ac016b61715d99f2055dee050397e3f13 https://git.postgresql.org/pg/commitdiff/6206454bdac1ccd6f6ed9d811e1a1139e663a8b9
修正錯字。 https://git.postgresql.org/pg/commitdiff/6d177e2813a2b4415539e2861b595583cc1a8f71
重構一些錯誤訊息,以便更容易翻譯。 https://git.postgresql.org/pg/commitdiff/ec6e70c79fffe9292402ee602d3742a8c7d31bd2
pg_amcheck: 訊息樣式和格式改進。 https://git.postgresql.org/pg/commitdiff/5a73a9e3b5b24cf2dd90ab4a7ae3724b2c12a0cc
訊息樣式改進。 https://git.postgresql.org/pg/commitdiff/09ae329957b739dfbaf722eb5624d0a71fdff3b4
David Rowley 推送了
Doc: 移除有關執行階段分割區修剪的過時註解。 自 86dc90056 以來,該註解已不再正確,因此將其移除。 Author: Amit Langote Discussion: https://postgr.es/m/CA+HiwqFxQn7Hz1wT+wYgnf_9SK0c4BwOOwFFT8jcSZwJrd8HEA@mail.gmail.com https://git.postgresql.org/pg/commitdiff/1692d0c3a3fc7716d7d00e0d657248cb98bf4df8
將誤導性的 while 迴圈轉換為 if 條件。 這似乎是從 ea15e1867 以及我們過去在每個節點上評估 SRF 時遺留下來的。 由於在迴圈主體的末尾有一個無條件的「return」,因此只可能進行 1 個迴圈,因此我們可以將其更改為 if 條件。 這裡沒有修復任何實際錯誤,因此沒有向後移植。 僅在 master 中修復此異常現象似乎很好。 Author: Greg Nancarrow Discussion: https://postgr.es/m/CAJcOf-d7T1q0az-D8evWXnsuBZjigT04WkV5hCAOEJQZRWy28w@mail.gmail.com https://git.postgresql.org/pg/commitdiff/6cb93beddd33d00e0ce2ee55edfa32cd2a935394
Andrew Dunstan 推送了
Fujii Masao 推送了
Etsuro Fujita 推送了
修正 EXPLAIN ANALYZE 對於支援非同步節點的問題。 對於與 postgres_fdw 關聯的支援非同步 ForeignScan 節點的 EXPLAIN ANALYZE 僅透過使用從節點的回呼呼叫的 ExecProcNode() 的檢測來完成,導致以下問題: 1) 如果要掃描的遠端表為空,則即使執行了節點,該命令也會錯誤地將該節點視為「從未執行過」,因為在這種情況下,ExecProcNode() 根本沒有從節點的回呼中呼叫。 2) 該命令無法收集節點中完成的 ExecProcNode() 以外的其他事情的計時,例如為節點的遠端查詢建立游標。 為了修正這些問題,為支援非同步節點添加檢測,並相應地修改 postgres_fdw。 我在提交 27e1f1456 中的疏忽。 同時,更新 execnodes.h 中 AsyncRequest 結構的註解以及 fdwhandler.sgml 中 ForeignAsyncRequest API 的文件,以符合 nodeAppend.c 中 ExecAsyncAppendResponse() 中的程式碼,並修正 nodeAppend.c 中註解的錯字。 根據 Andrey Lepikhov 的報告,雖然我沒有使用他的修補程式。 Reviewed-by: Andrey Lepikhov Discussion: https://postgr.es/m/2eb662bb-105d-fc20-7412-2f027cc3ca72%40postgrespro.ru https://git.postgresql.org/pg/commitdiff/a363bc6da96b14d27e1cae1bae97242eb6ade5e6
防止直接修改外部資料表的非同步執行。提交 27e1f1456 和 86dc90056(兩者是獨立討論的)會在啟用非同步執行的情况下執行繼承的外部 UPDATE/DELETE 查詢時導致崩潰。在這種情況下,Append 節點(Append node)的子節點(它是 ModifyTable 節點的直接/間接子節點)會被重寫,以便透過 postgresPlanDirectModify() 直接修改外部資料表。由於直接修改是以非同步方式執行的,但目前非同步執行不支援這種方式。透過在該函數中停用直接修改的非同步執行來修復此問題。作者:Etsuro Fujita 審閱者:Amit Langote 討論:https://postgr.es/m/CAPmGK158e9sJOfuWxfn%2B0ynrspXQU3JhNjSCbaoeSzMvnga%2Bbw%40mail.gmail.com https://git.postgresql.org/pg/commitdiff/a784859f4480ceaa05a00ca35311071ca33483d1
Álvaro Herrera 推送了
重新命名邏輯複製全域變數 "wrconn"。worker.c 全域變數 wrconn 僅供邏輯套用/資料表同步工作程序使用,但還有其他具有相同名稱的變數。為了減少未來的混淆,將全域變數從 "wrconn" 重新命名為 "LogRepWorkerWalRcvConn"。雖然這只是表面上的更改,但最好將其全部回溯到 10,因為此程式碼出現在 10 中,以避免未來出現回溯問題。作者:Peter Smith smithpb2250@gmail.com 討論:https://postgr.es/m/CAHut+Pu7Jv9L2BOEx_Z0UtJxfDevQSAUW2mJqWU+CtmDrEZVAg@mail.gmail.com https://git.postgresql.org/pg/commitdiff/db16c656478b815627a03bb0a31833391a733eb0
描述分割資料表的 (自動) 分析行為。這解釋了 0827e8af70f4 引入的新行為以及已存在的行為。作者:Justin Pryzby pryzby@telsasoft.com 作者:Álvaro Herrera alvherre@alvh.no-ip.org 討論:https://postgr.es/m/20210423180152.GA17270@telsasoft.com https://git.postgresql.org/pg/commitdiff/1b5617eb844cd2470a334c1d2eec66cf9b39c41a
允許將 compute_query_id 設置為 'auto' 並使其成為預設值。僅允許 on/off 意味著如果我們預設禁用它,所有現有的配置指南都將過時,或者如果我們預設啟用它,我們將不得不接受預設配置中的效能損失。透過允許 'auto' 作為折衷方案,效能成本僅由啟用 pg_stat_statements 和類似模組的人支付。我只編輯了發布說明,以註釋掉一個現在事實上錯誤的段落;可能需要進一步編輯以更詳細地描述相關變更。作者:Julien Rouhaud rjuju123@gmail.com 審閱者:Justin Pryzby pryzby@telsasoft.com 討論:https://postgr.es/m/20210513002623.eugftm4nk2lvvks3@nol https://git.postgresql.org/pg/commitdiff/cafde58b337e007cb6a719f5ab4dd6459d932a39
修復 EXEC_BACKEND 建置。根據建置農場 https://git.postgresql.org/pg/commitdiff/354f32d01dedc2c86a05be298a62cdae9710d203
Amit Kapila 推送了
Alexander Korotkov 推送了
Peter Geoghegan 推送了
修復自動清理日誌輸出堆積截斷問題。自動清理日誌輸出(在提交 5100010ee4d 之後)報告的資料表值的區塊百分比永遠不應超過 100%,因為它描述了回呼叫 lazy_vacuum() 時資料表的狀態。但如果發生堆積關係截斷,該值可能超過 100%。我們未能補償截斷如何影響 rel_pages。透過使用原始 rel_pages 值而不是目前的/最終 rel_pages 值來修復錯誤的會計。回報者:Andres Freund andres@anarazel.de 討論:https://postgr.es/m/20210423204306.5osfpkt2ggaedyvy@alap3.anarazel.de https://git.postgresql.org/pg/commitdiff/fbe9b80610fe17ed27ee318bdc5ba06ed86b1a71
加強 nbtree 重複資料刪除發布分割程式碼。向處理 nbtree 發布清單分割的程式碼新增一個防禦性的「不可能發生」錯誤(提升現有的斷言)。這避免了在插入一個以某種方式與索引中現有非樞紐元組相同的 newitem 時發生的分段錯誤。nbtree 索引永遠不應有兩個具有相同 TIDs 的索引元組。如果發生任何導致索引與索引的堆積關係處於不一致狀態的損壞,這種情況並非特別不可能。有兩個已知的可預防硬崩潰的報告。鑑於人們普遍期望 nbtree 能夠合理地應對損壞的資料,不做任何事情似乎是不可接受的。討論:https://postgr.es/m/CAH2-Wz=Jr_d-dOYEEmwz0-ifojVNWho01eAqewfQXgKfoe114w@mail.gmail.com 回溯:13-,即引入 nbtree 重複資料刪除的地方。 https://git.postgresql.org/pg/commitdiff/8f72bbac3e4b1d1be9598e8edb9353fa5dc48138
Amit Langote 發送了另一個修訂版的補丁,以允許在跨分割區更新期間批次插入。
Nitin Jadhav 發送了一個補丁,以使 src/backend/utils/activity/backend_status.c 中註解中的檔案路徑與實際檔案路徑匹配。
Bharath Rupireddy 發送了一個補丁,以使 PostgreSQL FDW 快取連線函數測試更有意義。
Thomas Munro 發送了一個補丁,以覆蓋 HASH_REMOVE 釋放的記憶體,並避免在釋放本地鎖定後存取它們。
Andres Freund 發送了一個補丁,以在 walreceiver 中清零部分頁面。
Peter Smith 發送了一個補丁,以確保 GetSubscriptionRelations 僅宣告 1 個掃描鍵。
Vigneshwaran C 發送了另三個修訂版的補丁,以在邏輯複製訊息描述中包含使用的實際資料類型。
Tang 發送了另三個修訂版的補丁,以使 psql 中 DELETE FORM 和 INSERT INTO 的 Tab 鍵完成保持一致。
Vigneshwaran C 發送了另三個修訂版的補丁,以使錯誤訊息更能提供有關實際錯誤的資訊。
Kyotaro HORIGUCHI 發送了另兩個修訂版的補丁,以根據 recoveryTargetTLI 正確設定 expectedTLEs。
Etsuro Fujita 發送了另一個修訂版的補丁,以修復能夠進行非同步處理的節點的 EXPLAIN ANALYZE。
Hou Zhijie 發送了另一個修訂版的補丁,以檢查 fmgr_info 中的 UDF 並行安全性、修復測試案例中的 UDF 並行安全性標籤、檢查 fmgr_info 中的內建函數並行安全性以及修復測試案例中的內建並行安全性標籤。
Honza Horak 發送了一個補丁,以修復 Python 3.10 的子交易測試。
Masahiko Sawada 發送了另一個修訂版的補丁,以引入外部交易的交易管理器,並使用相同的管理器來處理涉及它們的兩階段提交。
Masahiro Ikeda 發送了另兩個修訂版的補丁,以提高報告 wal 統計資料的效能。
侯志杰提交了兩個版本的補丁,使使用者可以宣告一個資料表允許平行資料修改,啟用平行 select for insert,實作一個工具函式 pg_get_parallel_safety(regclass),該函式返回 (objid, classid, parallel_safety) 的紀錄,代表決定指定資料表平行安全性的物件的平行安全性,並更新迴歸測試以包含相同內容。
Pavel Stěhule 提交了兩個版本的補丁,以實作綱要變數。
Pavel Stěhule 提交了另一個版本的補丁,使 pg_dump 可以從檔案讀取資料表名稱。
Pavel Stěhule 提交了另一個版本的補丁,使 psql 中的 \watch 可以指定單獨的分頁程式。
曾文靜提交了另一個版本的補丁,以實作全域臨時資料表。
Tom Lane 提交了另一個版本的補丁,以使用固定範圍檢查替換 pg_depend PIN 條目。
Atsushi Torikoshi 提交了一個補丁,添加了一個 pg_log_current_plan(pid) 函式,允許使用者取得目前正在執行的查詢的計畫。
Mark Dilger 提交了另一個版本的補丁,將 GUC 變數的設定委派給一些新建立的 ROLE。
Michail Nikolaev 提交了兩個版本的補丁,以在備用伺服器上添加對索引 LP_DEAD hint bits 的完整支援。
Amul Sul 提交了兩個版本的補丁,以實作 ALTER DATABASE READ {ONLY | WRITE}。
Vigneshwaran C 和 Bharath Rupireddy 交換了補丁,以澄清 ALTER SUBSCRIPTION ... DROP PUBLICATION 的訊息和文件。
Ranier Vilela 提交了一個補丁,以修復 src/backend/commands/tablecmds.c 中的顯式 NULL 指標解參考。
Michaël Paquier 提交了一個補丁,添加了 vacuum_cleanup_index_scale_factor GUC。
Vigneshwaran C 提交了兩個版本的補丁,旨在修復一個錯誤,該錯誤表現為訊息文字失敗,方法是檢查 pg_replication_slot 中的 active 欄位,而不是 pg_stat_replication,pg_replication_slot 測試更可靠。
Bharath Rupireddy 提交了一個補丁,以重新措辭平行 VACUUM 的錯誤訊息和文件。
Nathan Bossart 提交了一個補丁,允許在 pg_hba.conf 中指定直接的角色成員關係。
Peter Smith 和 Ajin Cherian 交換了補丁,以支援兩階段交易的邏輯解碼。
Peter Geoghegan 提交了一個補丁,以考慮在 vacuumlazy.c 的第一次掃描期間觸發 failsafe。
Amit Langote 提交了一個補丁,以修復 pgoutput tupeconv map 洩漏。
Kyotaro HORIGUCHI 提交了一個補丁,以將有關大括號的錯誤與它們的名稱相匹配。
Vigneshwaran C 提交了三個版本的補丁,以將 ALTER SUBSCRIPTION SET 選項 streaming 和 binary 的 Tab 鍵自動完成添加到 psql。
Ranier Vilela 提交了兩個版本的補丁,以修復 src/timezone/zic 中可能發生的記憶體損壞。
Michaël Paquier 提交了另一個版本的補丁,以將 pg_upgrade 的測試重寫為 TAP 測試。
Nitin Jadhav 和 Justin Pryzby 交換了補丁,以從 create_list_bounds 中刪除額外的記憶體分配,將 PartitionListValue 和 create_hash_bounds PartitionHashBound 分配為單個區塊,批量分配 datum 陣列以避免 palloc 開銷,並在 create_range_bounds 中 pfree() 中間結果。
Tom Lane 提交了兩個版本的補丁,旨在修復一個錯誤,該錯誤表現為 prion 失敗,並顯示錯誤:pg_toast_2619 中 toast 值 14334 缺少區塊號碼 0。
Tatsuo Ishii 提交了兩個版本的補丁,以修復 README.barrier 中的錯字。
Nitin Jadhav 提交了一個補丁,以支援 to_char() 中的 tzh_tzm 模式。