PostgreSQL 每週新聞 - 2021 年 10 月 17 日

發表於 2021-10-18 作者:PWN
PWN

PostgreSQL 每週新聞 - 2021 年 10 月 17 日

PostgreSQL 產品新聞

psycopg2 3.0.0,一個 PostgreSQL 的 Python 連接器,已發布

pg_partman 4.6.0,一個用於分割表格的管理系統,已發布

pgAdmin4 6.0,一個用於 PostgreSQL 的基於 Web 和原生 GUI 控制中心,已發布

Percona Distribution for PostgreSQL Operator 1.0.0,一個基於 Crunchy Data 的 Kubernetes operator,適用於 PostgreSQL,已發布

10 月份的 PostgreSQL 工作

https://archives.postgresql.org/pgsql-jobs/2021-10/

PostgreSQL 新聞

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

PostgreSQL 每週新聞由 David Fetter 本週為您帶來

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

已套用的修補程式

Tom Lane 推送了

  • Doc:更新 src/test/perl/README 中的測試配方。先前的文本沒有提供關於 TAP 測試可移植性策略的清晰解釋。使用 perlbrew 的配方也有一些問題:它導致了一個非共享的 libperl(阻止了 plperl 的測試),並且它導致一些模組更新到當前版本,而該配方的重點是構建一個舊環境。討論:https://postgr.es/m/E1mYY6Z-0006OL-QN@gemulon.postgresql.org https://git.postgresql.org/pg/commitdiff/3eb1f4d09745433c70ccac411cad24d0374b9c3b

  • 進一步修復 SEARCH BREADTH FIRST 查詢的 EXPLAIN。Commit 3f50b8263 有一個疏忽:以前,要反解析附加到計劃節點的表達式,只需在調用 set_deparse_plan 的同時更新 deparse_namespace ancestors 列表。現在必須更新 ancestors 列表,因為 set_deparse_plan 會查詢它,並且有一個調用站點搞錯了。此錯誤在大多數情況下被掩蓋了,因為 explain.c 對於 ancestors 列表只使用一個 List 物件,在掃描計劃時就地更新它,因此我們意外地在需要之前將正確的 List 分配給 dpns->ancestors。只有當 WorkTableScan 節點是我們嘗試反解析子表達式的第一個節點時才會失敗。根據 Markus Winand 的報告。與之前的修補程式一樣,反向移植到 v14。討論:https://postgr.es/m/648B0505-AA57-42C2-A2DA-E551DE46FA15@winand.at https://git.postgresql.org/pg/commitdiff/39ae0ef8561362304ee512963aa51d5a705e5616

  • 使 configure 檢查所需的最低 IPC::Run 版本。根據圍繞 3eb1f4d09 的討論,讓 configure 驗證可用的 IPC::Run 版本是否至少為 0.79,這是商定的最低版本。似乎不太可能有人會因此而受到影響,但它作為文檔很有用。(基於此,沒有必要進行反向移植。)為了保持一致性,也為我們明確檢查的另一個 Perl 模組 Time::HiRes 提供一個最低版本。我使用了 Perl 5.8.3 附帶的版本。討論:https://postgr.es/m/E1mYY6Z-0006OL-QN@gemulon.postgresql.org https://git.postgresql.org/pg/commitdiff/4a235efddaa78ec78a47614ddc6161644e089290

  • 修復規劃器錯誤,將子查詢表達式拉到函數 RTE 中。如果 FROM 中的函數橫向引用 FROM 子句中較早的子 SELECT 的輸出,並且我們能夠將該子 SELECT 展平到外部查詢中,則複製到函數 RTE 中的表達式會遺漏 eval_const_expressions 的處理。如果這些表達式包含具名參數函數調用語法或具有默認參數的函數,則這將導致執行時出現問題和可能的崩潰。如果查詢包含任何明確的 JOIN 語法,則該錯誤會被掩蓋,這可能有助於解釋我們為什麼沒有注意到。根據 Bernd Dorn 的錯誤 #17227。這是 commit 7266d0997 中的疏忽,因此反向移植到引入該功能的 v13。討論:https://postgr.es/m/17227-5a28ed1512189fa4@postgresql.org https://git.postgresql.org/pg/commitdiff/4d5f651f1d651c6fa79f9188e7b9a04654c7125a

  • 使 pg_dump 獲取要轉儲的分割表格上的鎖。顯然一直以來都有這樣做的意圖,但原始程式碼通過檢查錯誤的陣列元素來實現。我們在 403a3d91c 中順便修復了它,但後來被還原了,我們忘記保留這個錯誤修復。大多數時候,這相對無害,因為一旦我們鎖定了任何分割表格的葉子分割區,就足以防止對分割表格本身進行重大的 DDL 操作。但是,一個沒有子節點的分割表格將在沒有任何相關鎖定的情況下被轉儲,可能會導致轉儲失敗或輸出不一致。與 403a3d91c 不同,不存在版本問題,因為每個具有分割表格的伺服器版本都允許您鎖定一個。反向移植到引入分割表格的 v10。討論:https://postgr.es/m/1018205.1634346327@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/e2ff7d9a83d4b489806281dc6dfce88510b40ad7

  • 避免從 pre-8.3 伺服器轉儲時在 pg_dump 中核心轉儲。Commit f0e21f2f6 遺漏了將 tgisinternal 輸出欄位添加到 pre-8.3 伺服器的 getTriggers' 查詢中。與該 commit 一樣,反向移植到 v11。https://git.postgresql.org/pg/commitdiff/40dfac4fc4776213a02291f13046d36e318f2629

Michaël Paquier 推送了

  • 使用 "(expr) ? true : false" 清理更多程式碼。這與 fd0625c 類似,處理任何值得清理的剩餘程式碼路徑。這也改變了一些使用相反表達式模式的情況。作者:Justin Pryzby,Masahiko Sawada 討論:https://postgr.es/m/CAD21AoCdF8dnUvr-BUWWGvA_XhKSoANacBMZb6jKyCk4TYfQ2Q@mail.gmail.com https://git.postgresql.org/pg/commitdiff/68f7c4b57a27dbcd3e93ba3ff7b0b49664b25e09

  • 在 TAP 測試中新增更多 $Test::Builder::Level。增加報告的呼叫堆疊層級對於除錯很有用,因為它可以控制測試的哪個部分確實失敗了,尤其是在使用子程式(從 Test::More 呼叫例程)構建測試時。這增加了更多 $Test::Builder::Level 的增量,可以提高除錯效果(例如,對於 pg_rewind 等長子程式的路徑沒有意義)。基於 Andrew Dunstan 的建議以及我們雙方的措辭,在 src/test/perl/README 中新增了一條關於該功能的說明。Test::Builder::Level 的使用已在 12 中傳播開來,因此已完成至此版本的反向移植。Reviewed-by:Andrew Dunstan、Peter Eisentraut、Daniel Gustafsson 討論:https://postgr.es/m/YV1CCFwgM1RV1LeS@paquier.xyz Backpatch-through: 12 https://git.postgresql.org/pg/commitdiff/f9c4cb686800d46ef9e9e90ed5133493b23962af

  • 修正跨不同主要版本的 pg_upgrade 測試。 這修正了一系列問題,這些問題在使用 pg_upgrade 的 test.sh 跨不同主要版本進行升級時,會導致不同的損壞或惱人情況: - 當使用 v14 作為新版本時,由於移除了 testtablespace/ 作為 Makefile 規則,test.sh 完全損壞。 較舊版本的 pg_regress 不支援 --make-tablespacedir,阻礙了 tablespace 的建立。 為了修正這一點,在腳本本身中建立這些目錄非常簡單,但僅在涉及舊版本時才這樣做。 此修復需要在 HEAD 和 REL_14_STABLE 上進行。 - 當使用 PG <= v11 作為舊版本時,由於 v12 不支援 WITH OIDS 關聯,腳本將會失敗。 為了修正這一點,這裡借用了一個來自 buildfarm 的方法,該方法使用 DO 區塊來變更所有標記為 WITH OIDS 的關聯,允許 pg_upgrade 通過。 這比對導致問題的關聯使用 ALTER TABLE 查詢更具移植性。 這已修復到 v12,最初由 Andrew Dunstan 編寫。 - 在使用 v11 作為舊版本時,不使用 --extra-float-digits=0 會導致 dump 中出現大量差異,使整個內容無法閱讀。 這僅在使用 v11 作為舊版本時完成。 這已修復到 v12。 buildfarm 程式碼已在使用它。 請注意,新增 --wal-segsize 和 --allow-group-access 會在使用 v10 或更早版本在 initdb 時中斷腳本,因為這些是在 11 中新增的。 10 將在明年 EOL,並且沒有人抱怨過這些問題,因此沒有對此做任何處理。 這意味著此 commit 修正了使用 test.sh 以 v11 作為最小較舊版本的升級測試,直到 HEAD,並且足以將此變更應用到 12。 新舊 dump 仍然會產生差異,仍然需要手動檢查,並且可以做更多的事情來減少雜訊,但這允許測試以相當少的雜訊執行。 我已經使用此 commit 和 test.sh 以 v11 作為所有應用此變更的分支中的最小版本進行了測試。 請注意,此 commit 對於使用簡單的 "make check" 執行的正常 pg_upgrade 測試沒有任何影響。 作者:Justin Pryzby, Andrew Dunstan, Michael Paquier 討論: https://postgr.es/m/20201206180248.GI24052@telsasoft.com Backpatch-through: 12 https://git.postgresql.org/pg/commitdiff/fa66b6dee0843d2bca5bf9c9b8b7be32defbffae

  • 修正 CREATE TYPE 中 multirange 類型發生的 use-after-free 問題。 程式碼正在釋放儲存在解析樹中的 multirange 類型函數的名稱,但不應該這樣做。 例如,事件觸發器可以使用 ddl_command_end 事件查看這種已損壞的解析樹。 作者:Alex Kozhemyakin, Sergey Shinderuk 審閱人:Peter Eisentraut, Michael Paquier 討論: https://postgr.es/m/d5042d46-b9cd-6efb-219a-71ed0cf45bc8@postgrespro.ru Backpatch-through: 14 https://git.postgresql.org/pg/commitdiff/5b0e7fe1d67235a092be1132bc5c97f1d7f29aaf

Peter Geoghegan 推送

藤井正雄 推送

  • 使 autovacuum launcher 對 pg_log_backend_memory_contexts() 更敏感。 以前,當 pg_log_backend_memory_contexts() 將請求傳送到 autovacuum launcher 時,可能需要幾秒鐘以上的時間才能記錄其記憶體上下文。 因為處理 autovacuum launcher 收到的任何新中斷的函數 (HandleAutoVacLauncherInterrupts) 沒有處理記憶體上下文記錄的請求。 此 commit 變更了此函數,使其能夠處理請求,從而使 autovacuum launcher 對 pg_log_backend_memory_contexts() 更敏感。 Back-patch 到新增 pg_log_backend_memory_contexts() 的 v14。 作者:Koyu Tanigawa 審閱人:Bharath Rupireddy, Atsushi Torikoshi 討論: https://postgr.es/m/0aae3e074face409b35153451be5cc11@oss.nttdata.com https://git.postgresql.org/pg/commitdiff/e3e29cec10d15bbcedc6b41887d8f4e138d719bd

Peter Eisentraut 推送

Robert Haas 已推送

Etsuro Fujita 已推送

Álvaro Herrera 已推送

Jeff Davis 已推送

Andrew Dunstan 已推送