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,已釋出。
https://archives.postgresql.org/pgsql-jobs/2021-10/
Planet PostgreSQL:https://planet.postgresql.org/
本週 PostgreSQL 週報由 David Fetter 提供。
請在太平洋標準時間(PST8PDT)週日晚上3:00之前將新聞和公告發送至 david@fetter.org。
Tom Lane 提交
文件:更新 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
進一步修復 EXPLAIN 中 SEARCH BREADTH FIRST 查詢的處理。Commit 3f50b8263 有一個疏漏:以前,要反解析附加到計劃節點上的表示式,只需要在呼叫 set_deparse_plan 時更新 deparse_namespace ancestors 列表。現在,需要 *先* 更新 ancestors 列表,因為 set_deparse_plan 會查詢它,而有一個呼叫點在這方面出錯了。大多數情況下,這個錯誤被掩蓋了,因為 explain.c 只使用一個 List 物件作為 ancestors 列表,在掃描計劃時就地更新它,所以我們會在需要 dpns->ancestors 之前意外地將其分配給正確的 List。只有當 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 中的 planner 錯誤。如果 FROM 中的函式透過 lateral 引用 FROM 子句中較早的某個子 SELECT 的輸出,並且我們可以將該子 SELECT 展平到外層查詢中,那麼複製到函式 RTE 中的表示式就未能透過 eval_const_expressions 進行處理。如果這些表示式包含命名引數的函式呼叫語法或帶有預設引數的函式,這會導致執行時出現問題和可能的崩潰。查詢包含任何顯式 JOIN 語法時,此 bug 會被掩蓋,這也許可以解釋為什麼我們沒有注意到。根據 Bernd Dorn 的 bug #17227。這是 commit 7266d0997 中的疏漏,因此回溯到 v13(該 commit 引入了此功能)。討論:https://postgr.es/m/17227-5a28ed1512189fa4@postgresql.org https://git.postgresql.org/pg/commitdiff/4d5f651f1d651c6fa79f9188e7b9a04654c7125a
使 pg_dump 在轉儲分割槽表時獲取鎖。一直以來,它的意圖很明顯是這樣做,但最初的編碼錯誤地檢查了錯誤的陣列元素。我們在 403a3d91c 中順帶修復了這個問題,但後來被撤銷了,我們忘記了保留這個 bug 修復。大多數情況下,這可能相對無害,因為一旦我們鎖定任何分割槽表的葉子分割槽,就足以防止對分割槽表本身進行重大 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 未能在 getTriggers 的查詢中為 pre-8.3 伺服器新增 tgisinternal 輸出列。像該 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 中普及,因此向下回溯到此版本。審閱者:Andrew Dunstan, Peter Eisentraut, Daniel Gustafsson 討論:https://postgr.es/m/YV1CCFwgM1RV1LeS@paquier.xyz 回溯至:12 https://git.postgresql.org/pg/commitdiff/f9c4cb686800d46ef9e9e90ed5133493b23962af
修復 pg_upgrade 跨不同主版本測試。這修復了一系列問題,這些問題在使用 pg_upgrade 的 test.sh 進行跨不同主版本升級時會導致各種中斷或煩惱:- 當使用 v14 作為新版本時,由於 Makefile 規則移除了 testtablespace/,test.sh 完全中斷。舊版本的 pg_regress 不支援 --make-tablespacedir,阻止了表空間的建立。為了解決這個問題,在指令碼本身中建立這些目錄很簡單,但僅在涉及舊版本時才這樣做。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 會導致轉儲中出現大量差異,使整個轉儲難以閱讀。僅在使用 v11 作為舊版本時執行此操作。此修復回溯到 v12。buildfarm 程式碼已在使用此。請注意,新增 --wal-segsize 和 --allow-group-access 會在 initdb 時使用 v10 或更早版本中斷指令碼,因為這些選項在 11 中被新增。10 將於明年EOL,並且尚未有人抱怨這些問題,因此對此不做任何處理。這意味著此 commit 修復了使用 v11 作為最低舊版本、直到 HEAD 的 upgrade 測試,並且將其向下應用到 12 就足夠了。舊轉儲和新轉儲仍然會產生差異,仍然需要手動檢查,並且還可以做更多工作來減少噪音,但這允許測試以最少的干擾執行。我已經測試了此 commit 和 test.sh,使用 v11 作為最低版本,並應用於所有相關分支。請注意,此 commit 對正常使用 "make check" 的 pg_upgrade 測試執行沒有影響。作者:Justin Pryzby, Andrew Dunstan, Michael Paquier 討論:https://postgr.es/m/20201206180248.GI24052@telsasoft.com 回溯至:12 https://git.postgresql.org/pg/commitdiff/fa66b6dee0843d2bca5bf9c9b8b7be32defbffae
修復 CREATE TYPE 中多範圍型別的使用後釋放。程式碼釋放了儲存在解析樹中的多範圍型別函式的名稱,但不應該這樣做。例如,事件觸發器可能會使用 ddl_command_end 事件檢視這種損壞的解析樹。作者:Alex Kozhemyakin, Sergey Shinderuk 審閱者:Peter Eisentraut, Michael Paquier 討論:https://postgr.es/m/d5042d46-b9cd-6efb-219a-71ed0cf45bc8@postgrespro.ru 回溯至:14 https://git.postgresql.org/pg/commitdiff/5b0e7fe1d67235a092be1132bc5c97f1d7f29aaf
Peter Geoghegan 提交
amcheck:在 Hot Standby 中跳過未記錄的表。讓 verify_heapam.c 在 Hot Standby 模式下將未記錄的表視為空。這使其與 verify_nbtree.c 一致,後者自 bug 修復 commit 6754fe65a4 以來一直以相同方式處理未記錄的表。這是 commit 866e24d47d 的疏漏,該 commit 將 contrib/amcheck 擴充套件到檢查堆表。順便,降低了報告某個表被這樣跳過時的詳細程度,從 NOTICE 降到 DEBUG1。這是合適的,因為跳過行為只是一個實現細節,用於繞過未記錄表在 Hot Standby 模式下沒有 smgr 級別儲存的情況。受影響的未記錄表應被視為“已驗證”,而不是被跳過。它們在意義上與完全空的表被驗證相同。總的來說,這種行為似乎最少有問題,因為複製機上的未記錄表最初將是空的,當複製機被提升並且 Hot Standby 結束時。作者:Mark Dilger mark.dilger@enterprisedb.com 審閱者:Peter Geoghegan pg@bowt.ie 討論:https://postgr.es/m/CAH2-Wzk_pukOFY7JmdiFLsrz+Pd3V8OwgC1TH2Vd5BH5ZgK4bA@mail.gmail.com 回溯:14-,即引入堆 am 驗證的版本。 https://git.postgresql.org/pg/commitdiff/292698f158ddb3f9a88f536e6eecb9e55d9619c9
文件:規範化 vacuum_multixact_failsafe_age ID。作者:Pavel Luzanov p.luzanov@postgrespro.ru 討論:https://postgr.es/m/c71a3cfc-a267-3d9f-1b44-fbd668d0ab10@postgrespro.ru 回溯:14-,即引入 failsafe 的版本。 https://git.postgresql.org/pg/commitdiff/00c61a74bcdbc04a3db721d53c7aff62244da198
pg_amcheck:避免無用的驗證嘗試。避免使用不適合檢查的表呼叫 contrib/amcheck 函式。具體來說,不要嘗試驗證臨時表,或其 pg_index 條目表明索引無效或未就緒的索引。由於一些根本性的原因,contrib/amcheck 函式不支援這些表。例如,REINDEX CONCURRENTLY 的實現可以在 pg_index 中新增自己的“瞬態”條目,這至少在一般情況下對 B-Tree 驗證函式意味著不明確 — 所以它們只將其視為錯誤。現在,amcheck 呼叫者(在本例中是 pg_amcheck)需要在更高級別處理這種情況。pg_amcheck 現在只是將這些條件作為查詢系統目錄時的額外“可見性問題”。這有點武斷。在可用的替代方案中,這似乎問題最少。作者:Mark Dilger mark.dilger@enterprisedb.com 報告者:Alexander Lakhin exclusion@gmail.com 審閱者:Peter Geoghegan pg@bowt.ie 審閱者:Robert Haas robertmhaas@gmail.com Bug:#17212 討論:https://postgr.es/m/17212-34dd4a1d6bba98bf@postgresql.org 回溯:14-,即引入 pg_amcheck 的版本。 https://git.postgresql.org/pg/commitdiff/d2bf06db377967b0d671ae372d513806e2a28052
刪除不穩定的 pg_amcheck 測試。最近的 pg_amcheck bug 修復 commit d2bf06db 添加了一個測試用例,該用例在 buildfarm 中顯示為不可移植。它似乎也不太值得保留。將其刪除。討論:https://postgr.es/m/CAH2-Wz=7HKJ9WzAh7+M0JfwJ1yfT9qoE+KPa3P7iGToPOtGhXg@mail.gmail.com 回溯:14-,與原始 commit 相同。 https://git.postgresql.org/pg/commitdiff/cd3f429d9565b2e5caf0980ea7c707e37bc3b317
刪除過時的 nbtree 去重註釋。後續 commit 2903f140。 https://git.postgresql.org/pg/commitdiff/b76c1d6e849779e4a5a6c24d159a42125e522154
Fujii Masao 提交
Peter Eisentraut 提交
psql:更多測試。新增一些基本的命令列選項處理和幫助輸出測試,類似於我們為其他命令列程式所做的。這也為以後放置更多一次性測試用例提供了一個地方。討論:https://postgres.tw/message-id/2570e2ae-fa0f-aac9-f72f-bb59a9983a20@enterprisedb.com https://git.postgresql.org/pg/commitdiff/c0280bc3edeb9e9958efc14083b6f301d2ef79d5
psql:新增複製命令處理測試。新增一個測試,用於乾淨地處理不支援的複製命令響應。這曾經被意外破壞過,而且它似乎足夠不尋常,以至於手動測試時很容易忘記。討論:https://postgres.tw/message-id/2570e2ae-fa0f-aac9-f72f-bb59a9983a20@enterprisedb.com https://git.postgresql.org/pg/commitdiff/67c069848a998de1436cad2d67baedbf31c3a28c
psql:修復測試。在 getopt() 不支援選項之前不支援非選項引數的平臺上,此測試不起作用。 https://git.postgresql.org/pg/commitdiff/d9ddc50bafc062ec1ae7f98b886b7950102d87fc
psql:修復一些 scan-build 警告。一個反覆出現的抱怨是,scan-build 認為如果 \timing 設定在查詢處理過程中發生變化,後處理可能會讀取垃圾時間值。這可能目前不可能,但考慮到程式碼結構,並非完全不可想象。因此,透過小重構來消除此警告,使其更加健壯。其他警告是一些易於刪除的死儲存。討論:https://postgres.tw/message-id/2570e2ae-fa0f-aac9-f72f-bb59a9983a20@enterprisedb.com https://git.postgresql.org/pg/commitdiff/390edeeb570c01de1a14e2985ffed96de001e42e
修復不正確的格式佔位符。 https://git.postgresql.org/pg/commitdiff/780054bf31a0a6ba781f46c454f0116efee8a74c
Robert Haas 提交
重構 basebackup.c 的 `_tarWriteDir`() 函式。有時,我們會用 tar 檔案中的實際目錄替換資料目錄中找到的符號連結。`_tarWriteDir` 負責進行此替換以及將結果目錄的 tar 頭寫入 tar 檔案。使其只做第一件事,並重命名為 convert_link_to_directory。計劃對該原始檔進行更大量的重構,但這個小部分似乎可以獨立提交。討論:http://postgr.es/m/CA+Tgmobz6tuv5tr-WxURe5JA1vVcGz85k4kkvoWxcyHvDpEqFA@mail.gmail.com https://git.postgresql.org/pg/commitdiff/967a17fe2fa77b61061c8fb1183f64a5df4e080a
將一些恢復結束程式碼從 StartupXLOG() 中移出。建立新的函式 PerformRecoveryXLogAction() 並將寫入恢復結束記錄或請求檢查點的程式碼移到那裡。還建立了一個新的函式 CleanupAfterArchiveRecovery() 來執行一些我們希望在實際退出歸檔恢復後但在開始接受新 WAL 寫入之前執行的任務。計劃對該檔案進行更多重構,但此 commit 只是簡單的程式碼移動,以使 StartupXLOG() 稍微短一些,更容易理解。Robert Haas 和 Amul Sul 討論:http://postgr.es/m/CAAJ_b97abMuq=470Wahun=aS1PHTSbStHtrjjPaD-C0YQ1AqVw@mail.gmail.com https://git.postgresql.org/pg/commitdiff/6df1543abfed6f6a86b76a48fa11a6f019111c01
推遲與允許 WAL 相關的一些恢復結束操作。CreateOverwriteContrecordRecord()、UpdateFullPageWrites()、PerformRecoveryXLogAction() 和 CleanupAfterArchiveRecovery() 被移到了 StartupXLOG() 的稍後位置。這是為將來一個希望一次性結束恢復但稍後才開始允許 WAL 寫入的補丁做準備。為了做到這一點,有必要將必須允許 WAL 寫入的程式碼與僅僅因為恢復結束而需要執行的其他事情分開,例如初始化依賴於重做完成之前可能不準確的資訊的共享記憶體資料結構。此 commit 未能實現該目標,但它是朝著該方向邁出的一步。例如,在我們完成恢復後,有幾個不同的程式碼片段會將內容寫入 WAL,而在此更改後,這些程式碼片段比以前更接近,並且穿插的不相關程式碼片段更少。Robert Haas 和 Amul Sul 討論:http://postgr.es/m/CAAJ_b97abMuq=470Wahun=aS1PHTSbStHtrjjPaD-C0YQ1AqVw@mail.gmail.com https://git.postgresql.org/pg/commitdiff/811051c2e7af1b030467760baf7ee0f4a22bc992
shm_mq:減少 mq_bytes_written 的更新頻率。只有在寫入的資料量超過環大小的 1/4 時才更新 shm_mq 的 mq_bytes_written,除非 shm_mq_send(v) 的呼叫者在訊息末尾請求重新整理。這減少了 SetLatch() 的呼叫次數,也減少了 CPU 快取未命中次數,從而使 shm_mq 顯著更快。Dilip Kumar,由 Zhihong Yu 和 Tomas Vondra 審閱。我做了一些小的美學修改。討論:http://postgr.es/m/CAFiTN-tVXqn_OG7tHNeSkBbN+iiCZTiQ83uakax43y1sQb2OBA@mail.gmail.com https://git.postgresql.org/pg/commitdiff/46846433a03dff4f2e08c8a161e54a842da360d6
Etsuro Fujita 推送
Álvaro Herrera 提交
Jeff Davis 推送
Andrew Dunstan 推送