本週人物:https://postgresql.life/post/corey_huinker/
https://archives.postgresql.org/pgsql-jobs/2021-03/
Planet PostgreSQL: https://planet.postgresql.org/
本週 PostgreSQL 每週新聞由 David Fetter 為您帶來
請在太平洋標準時間/太平洋夏令時間星期日下午 3:00 前將新聞和公告提交至 david@fetter.org。
Amit Kapila 推送了
追蹤回滾的複製來源進度。 Commit 1eb6d6527a 允許追蹤 2PC 的副本來源重播進度,但它並不完整。它遺漏了正確追蹤回滾準備的進度,特別是遺漏了更新恢復的程式碼。此外,我們需要允許在 wal_level 可能不是 logical 的訂閱者節點上追蹤它。這是在 PG14 (a271a1b50e) 中提交的 2PC 解碼追蹤所必需的,而且到目前為止沒有人抱怨過,所以不進行反向移植。 作者:Amit Kapila 審閱者:Michael Paquier 和 Ajin Cherian 討論: https://postgr.es/m/CAA4eK1L-kHmMnSdrRW6UhRbCjR7cgh04c+6psY15qzT6ktcd+g@mail.gmail.com https://git.postgresql.org/pg/commitdiff/8a812e5106c5db50039336288d376a188844e2cc
為 "INSERT INTO ... SELECT ..." 啟用平行 SELECT。 在以下情況下,平行 SELECT 無法用於 INSERT: - INSERT 語句使用 ON CONFLICT DO UPDATE 子句 - 目標表具有平行不安全的觸發器、索引表示式或述詞、欄位預設表示式或檢查約束 - 目標表在任何欄位上都有平行不安全的網域約束 - 目標表是具有平行不安全分割區鍵表示式或支援函數的分割區表。 更新了規劃器,以便針對上述列出的情況執行額外的平行安全檢查,以確定在底層平行 SELECT 的情況下,以平行模式執行 INSERT 是否安全。 如果從額外的平行安全檢查或現有的 SELECT 平行安全檢查中沒有發現不安全的東西,則規劃器將考慮使用平行 SELECT 用於 "INSERT INTO ... SELECT ..."。 在檢查平行安全性的同時,我們需要檢查表上所有分割區的平行安全性,這可能會很昂貴,尤其是在我們決定不使用平行計畫時。 因此,在單獨的補丁中,我們將引入一個 GUC 和/或一個 reloption 來啟用/禁用 INSERT 語句的平行性。 在進入具有平行 SELECT 的 INSERT 執行平行模式之前,會獲取 TransactionId 並將其分配給當前事務狀態。 這是必要的,以防止 INSERT 在平行模式下嘗試分配 TransactionId,這是被禁止的。 這種方法的一個缺點是,如果底層 SELECT 沒有傳回任何列,則不會使用 TransactionId,但在許多情況下,這不應該發生。 作者:Greg Nancarrow, Amit Langote, Amit Kapila 審閱者:Amit Langote, Hou Zhijie, Takayuki Tsunakawa, Antonin Houska, Bharath Rupireddy, Dilip Kumar, Vignesh C, Zhihong Yu, Amit Kapila 測試者:Tang, Haiying 討論: https://postgr.es/m/CAJcOf-cXnB5cnMKqWEp2E2z7Mvcd04iLVmV=qpFJrR3AcrTS3g@mail.gmail.com 討論: https://postgr.es/m/CAJcOf-fAdj=nDKMsRhQzndm-O13NY4dL6xGcEvdX5Xvbbi0V7g@mail.gmail.com https://git.postgresql.org/pg/commitdiff/05c8482f7f69a954fd65fce85f896e848fc48197
修復 commit 05c8482f7f 中的 valgrind 問題。 通過 is_parallel_safe() 初始化 max_parallel_hazard_context 中其他新添加的變數,因為我們不檢查該函數中目標關係的平行安全性。 報告者:Tom Lane(根據 buildfarm) 作者:Amit Kapila 討論: https://postgr.es/m/2060179.1615347455@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/e4e87a32cc5559303068b148bd4aa6a39b8f44a1
修復 commit 05c8482f7f 引入的 relcache TriggerDesc 欄位的用法。 該 commit 添加了在另一個快取存取中使用 relcache TriggerDesc 欄位的程式碼,這是它不應該做的,因為 relcache 無法保證它不會被移動。 診斷者:Tom Lane 作者:Greg Nancarrow 審閱者:Hou Zhijie, Amit Kapila 討論: https://postgr.es/m/2309260.1615485644@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/e2cda3c20a61c76e497fb2ebb6d2b2ae8c43c014
修復 commits d6ad34f3 和 bea449c6 引入的計算中的大小溢位。 報告者:Thomas Munro 作者:Takayuki Tsunakawa 審閱者:Kyotaro Horiguchi 討論: https://postgr.es/m/CA+hUKG+oPoFizjABt=GXZWTEHx3oev5rAe2scjW2r6F1rguo5w@mail.gmail.com https://git.postgresql.org/pg/commitdiff/519e4c9ee21a656879123f4843f1d8d60cb71536
改進 05c8482f7f 添加的 FK 觸發器平行安全性檢查。 Commit 05c8482f7f 添加了與 FK 觸發器的平行安全性相關的特殊邏輯。 這有點 hacky,應該簡單地通過在這些觸發函數本身上設定適當的 proparallel 值來完成。 建議者:Tom Lane 作者:Greg Nancarrow 審閱者:Amit Kapila 討論: https://postgr.es/m/2309260.1615485644@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/c5be48f092016b1caf597b2e21d588b56c88a23e
Tom Lane 推送了
進一步調整 regex DFA 的記憶體管理。 在 commit 190c79884 之後,Coverity 仍然不滿意,而且在仔細觀察之後,我認為它可能說對了一些東西。 newdfa() 的呼叫者通常會在 v->err 被設定為非零時退出,如果 newdfa() 失敗,它會忠實地執行此操作。 但是,如果 v->err 在我們進入 newdfa() 之前已經是非零的,該怎麼辦? 然後 newdfa() 可能會成功,而呼叫者會立即洩漏其結果。 我不認為這種情況實際上會發生,但謂詞 "呼叫 newdfa() 時 v->err 總是零" 似乎很難完全確定; 有相當多的程式碼可能會出錯。 看起來最好調整呼叫者以直接檢查空結果,而不是依賴 ISERR() 測試。 無論如何,這比以前的編碼稍微便宜一些。 由於缺乏任何實際錯誤的證據,因此沒有反向移植。 https://git.postgresql.org/pg/commitdiff/6c20bdb2a279086777a3595ab00bcf14671fc5a1
驗證 pg_import_system_collations() 的 OID 參數。 "SELECT pg_import_system_collations(0)" 導致斷言失敗。 使用隨機的非零參數 - 或者實際上在非斷言構建中使用零 - 它會愉快地使用垃圾 collnamespace 值來建立 pg_collation 條目。 就我所知,這些都是無害的(除非 OID 碰巧在稍後用於 schema?)。 無論如何,這不是一個安全問題,因為該函數僅供超級使用者使用。 但對於粗心的 DBA 來說,這似乎是一個陷阱,所以讓我們添加一個檢查,以確保給定的 OID 屬於某個 schema。 反向移植到引入此函數的 v10。 https://git.postgresql.org/pg/commitdiff/5c06abb9b97b69513a3998cccf89556e73052e02
正確地將 pg_stat_get_subscription() 標記為返回一個集合 (set)。此函數的初始目錄資料未能設定 proretset 或提供 prorows 估計值。當在 FROM 子句中調用時,它意外地正常運作,因為執行器對此不太挑剔;但規劃器 (planner) 預期該函數不會返回多個 rows,這可能會導致錯誤的計劃。此外,如果在 SELECT 列表中調用該函數,則會失敗。我們無法輕易地回溯修補此錯誤,但幸運的是,在大多數情況下,該錯誤的後果並非非常嚴重。正確處理此事主要是一種未來驗證的措施。討論:https://postgr.es/m/1636062.1615141782@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/fed10d4eec79242688382d03ddca82007160ee6f
如果 FROM 子句中的函數在不應該返回集合時返回了,則發出警告。如果 FROM 子句中的函數嘗試返回集合,但未標記為 proretset,則拋出「函數協定違規 (function protocol violation)」錯誤。儘管目前這些情況可以運作,但我們似乎不希望保證它會繼續運作。此外,不設定 proretset 標誌還有其他負面後果,例如可能導致錯誤的計劃。不進行回溯修補,因為如果存在任何違反此預期的第三方程式碼,人們不會喜歡我們在次要版本中破壞它。討論:https://postgr.es/m/1636062.1615141782@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/d4545dc19b8ea670bf62e06d22b0e4e6fcb45153
文件:修復缺少提及程序 (procedure) 的 OUT 參數的問題。commit 2453ea142 中的小疏忽。 https://git.postgresql.org/pg/commitdiff/3ebc6d295705fec37dc8f57a4ece54b370f55f72
文件:改進關於程序的介紹性資訊。通過列出函數和程序之間的主要差異,來闡明「使用者定義程序」中的討論。值得注意的是,這避免了埋沒關於程序能夠進行交易控制 (transaction control) 的資訊。使 CREATE FUNCTION 參考頁面中的反向連結更加突出,並在 CREATE PROCEDURE 中添加一個。根據 Guyren Howe 的抱怨。感謝 David Johnston 的討論。討論:https://postgr.es/m/BYAPR03MB4903C53A8BB7EFF5EA289674A6949@BYAPR03MB4903.namprd03.prod.outlook.com https://git.postgresql.org/pg/commitdiff/227338b00d498d9e1c5705a1ab118585e5d57c87
文件:移除 <foreignphrase> 標籤。我們將 "per se"、"pro forma" 和 "ad hoc" 的一些實例設為斜體,但不是全部。這些詞語在正式英語中很常見,因此它們是否符合外來詞語的標準值得商榷。我們可以嘗試在 <foreignphrase> 的使用上更加一致,但這很難強制執行,因此我們只需移除這些詞語的標籤。看起來唯一值得使用該標籤的是 "voilà"。我們沒有保留該標籤的單一實例,而是將其更改為更標準的詞語。John Naylor 討論:https://postgr.es/m/CAFBsxsHtWs_NsccAVgQ=tTUKkXHpHdkjZXtp_Cd9dGWyBDxfbQ@mail.gmail.com https://git.postgresql.org/pg/commitdiff/b12436340adf27aa3d334c92579e6662dd3090ce
避免為繼承的 FK 約束建立重複的快取計劃 (cached plans)。當外鍵約束應用於分割表 (partitioned table) 時,每個葉子分割區都會繼承類似的 FK 約束。我們獨立處理所有這些約束,這意味著在大型分割樹中,我們會建立大量的快取 FK 檢查查詢計劃集合。但是,在除了一種情況之外的所有情況下,生成的查詢對於繼承樹的所有成員實際上都是相同的 (因為在大多數情況下,查詢僅提及 FK 關係另一側的最頂層表)。因此,我們可以在所有分割區之間共享單個快取計劃,從而節省記憶體,更不用說建立和維護快取計劃的時間了。Keisuke Kuroda 和 Amit Langote 討論:https://postgr.es/m/cab4b85d-9292-967d-adf2-be0d803c3e23@nttcom.co.jp_1 https://git.postgresql.org/pg/commitdiff/c3ffe34863688115dd7878f118f2a123bafd8a26
重新簡化 pqParseInput3 的子程序中 inStart 的管理。Commit 92785dac2 將一些與 inStart 的推進相關的邏輯從 pqParseInput3 複製到 getRowDescriptions 和 getAnotherTuple 中,因為它希望允許使用者定義的 row processor 回呼函數 (callbacks) 潛在地 longjmp 出庫,並且 inStart 必須在此之前更新,以避免無限循環。我們後來認為該 API 非常脆弱並恢復了它,但我們沒有撤消所有相關的程式碼變更,並且這種混亂持續存在。現在撤消它,以便在 pqParseInput3 的處理中只有一個地方推進 inStart;這將簡化添加更好的追蹤支援。getParamDescriptions 在某種程度上也增加了類似的處理 (不是在 92785dac2 中;我沒有追蹤到具體時間),但它實際上是有錯誤的,因為它對損壞訊息的處理似乎是從缺少已知訊息長度的 v2 邏輯中複製過來的。我們 "goto not_enough_data" 的情況不應簡單地返回 EOF,因為這樣我們就不會消耗訊息,從而可能造成無限循環。這種情況現在代表一個明確損壞的訊息,我們應該將其報告為損壞。儘管沒有看到 getParamDescriptions 陷入循環的現場報告,但回溯修補該修復似乎是合適的。我選擇回溯修補所有這些,以使邏輯在受支援的分支中看起來更相似。討論:https://postgr.es/m/2217283.1615411989@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/51c54bb603098416dc6f9d9d46a3d14861f8fc38
禁止將 identity 欄位 (column) 標記為可為空 (nullable)。GENERATED ALWAYS AS IDENTITY 意味著 NOT NULL,但是如果使用 "GENERATED ALWAYS AS IDENTITY NULL" 覆蓋它,則程式碼未能發出警告。有人可能會認為舊的行為是一個功能,但它是不一致的,因為結果會根據子句的順序而變化,因此它似乎只是一個疏忽。根據 Pavel Boev 的 bug #16913。回溯修補到引入 identity 欄位的 v10。Vik Fearing (我進行了小的調整) 討論:https://postgr.es/m/16913-3b5198410f67d8c6@postgresql.org https://git.postgresql.org/pg/commitdiff/f52c5d6749a61fc4e0908457c58f5069910d53a6
修正 psql \e 在偵測檔案修改時的競爭條件 (race condition)。psql 的編輯指令會檢查修改時間戳記是否變更,來判斷使用者是否已編輯檔案。對於已存在的檔案來說,這可能沒問題,但對於在指令中建立的暫存檔,快速的打字員可能會在 stat(2) 時間戳記的 1 秒精確度內儲存並離開。在 Windows FAT 檔案系統上,精確度更差,為 2 秒,更容易觸發競爭條件。為了修正這個問題,嘗試將暫存檔的修改時間設定為兩秒前。這不太可能失敗,但同樣地,競爭條件本身也不太可能發生,所以忽略任何錯誤。此外,我們不妨也檢查檔案大小以及修改時間。雖然這個錯誤很難觸發,但仍然值得回溯修補,以確保使用者的編輯不會遺失。Laurenz Albe,根據 Jacob Champion 的抱怨;基於 Jacob 和我自己的修正建議。討論:https://postgr.es/m/0ba3f2a658bac6546d9934ab6ba63a805d46a49b.camel@cybertec.at https://git.postgresql.org/pg/commitdiff/48d67fd897918c72e7cdf703d794056b88ed5725
pg_amcheck: 繼續嘗試修正測試。修正另一個測試中不可移植的選項順序的範例。24189277f 中的疏忽。Mark Dilger 討論:https://postgr.es/m/C37D28BA-3BA3-4776-B812-17F05F3472D8@enterprisedb.com https://git.postgresql.org/pg/commitdiff/9e294d0f34d6e3e4fecf6f190b48862988934cde
文件:新增關於如何執行 pg_amcheck 迴歸測試的說明。不太容易立即知道要如何讓 "make installcheck" 在這裡運作,因此以與其他地方相同的方式記錄它。https://git.postgresql.org/pg/commitdiff/58f57490facdec78119e5bab84229dbdc1d5ac6a
Michaël Paquier 推送
移除對 SSL 壓縮的支援。PostgreSQL 從 e3bdb2d 開始已停用壓縮,且文件建議不要使用它。此外,OpenSSL 從 1.1.0 版本開始已停用 SSL 壓縮,並且許多發行版在此之前很久就已停用。最新的 TLS 版本 TLSv1.3 在協定層級禁止壓縮。此提交移除了該功能本身,移除了對 libpq 參數 sslcompression 的支援(為了與現有連線字串的相容性,該參數仍然列出,但只是被忽略),並移除了 pg_stat_ssl 和事實上的 PgBackendSSLStatus 中的對應欄位。請注意,除了移除透過設定啟用壓縮的功能之外,前端和後端都會主動停用壓縮,以避免來自本機設定的覆寫。新增了一個 TAP 測試,用於已棄用的 SSL 參數,以便在回溯相容性後進行檢查。提升目錄版本。作者:Daniel Gustafsson 審閱者:Peter Eisentraut、Magnus Hagander、Michael Paquier 討論:https://postgr.es/m/7E384D48-11C5-441B-9EC3-F7DB1F8518F6@yesql.se https://git.postgresql.org/pg/commitdiff/f9264d1524baa19e4a0528f033681ef16f61b137
在 COPY 中新增對更多進度報告的支援。該指令(TO 或 FROM)、其類型(檔案、管道、程式或回呼),以及 COPY FROM 中 WHERE 子句排除的元組數量,已新增至已提供的進度報告中。"lines_processed" 欄位已重新命名為 "tuples_processed",以便消除 CSV 和 BINARY COPY 中此欄位的含義歧義,並與其他目錄進度視圖更加一致。再次提升目錄版本。作者:Matthias van de Meent 審閱者:Michael Paquier、Justin Pryzby、Bharath Rupireddy、Josef Šimánek、Tomas Vondra 討論:https://postgr.es/m/CAEze2WiOcgdH4aQA8NtZq-4dgvnJzp8PohdeKchPkhMY-jWZXA@mail.gmail.com https://git.postgresql.org/pg/commitdiff/9d2d45700928d49212fb7ed140feeaebe3a6014f
將 sslcompression 切換回 libpq 中的一般輸入欄位。根據 buildfarm 成員 crake 的說法,任何包含設定了此選項的 postgres_fdw 伺服器,都將無法正確執行 pg_upgrade,因為該選項在 f9264d1 中變為除錯選項而被隱藏,導致 FDW 伺服器的還原失敗。這將 libpq 中的選項改回可見,但仍處於非活動狀態,以修正此升級問題。討論:https://postgr.es/m/YEbq15JKJwIX+S6m@paquier.xyz https://git.postgresql.org/pg/commitdiff/096bbf7c934a4288c9e48a6ac8e91d8753ac1ccd
還原 libpq 中 SSL 壓縮的變更。這部分還原了 096bbf7 和 9d2d457,取消了 libpq 的變更,因為這可能會導致在多個 Postgres 主要版本中共享單個 libpq 版本的發行版發生中斷,用於連結到該版本的擴充套件和應用程式。請注意,後端在此處未更改,它仍然停用 SSL 壓縮,同時簡化了追蹤 SSL 連線是否已啟用的基礎目錄。根據與 Tom Lane 和 Daniel Gustafsson 的討論。討論:https://postgr.es/m/YEbq15JKJwIX+S6m@paquier.xyz https://git.postgresql.org/pg/commitdiff/0ba71107efeeccde9158f47118f95043afdca0bb
將 tablespace 路徑重新建立從 makefile 移到 pg_regress。將此邏輯移至 pg_regress 修正了並行測試中可能發生的故障,當 pg_upgrade 和主要迴歸測試套件都觸發了 makefile 規則,該規則清理了 src/test/regress 下的 testtablespace/。即使 pg_upgrade 觸發了此規則,它也無需這樣做,因為它使用了不同的 tablespace 路徑。因此,如果 pg_upgrade 觸發了 tablespace 設定的 makefile 規則,而主迴歸測試套件執行了 tablespace 案例,則會失敗。61be85a 是類似的嘗試,但這破壞了迴歸測試需要在 Administrator 帳戶下運行的案例,例如 Appveyor。報告者:Andres Freund、Kyotaro Horiguchi 審閱者:Peter Eisentraut 討論:https://postgr.es/m/20201209012911.uk4d6nxcnkp7ehrx@alap3.anarazel.de https://git.postgresql.org/pg/commitdiff/6c788d9f6aadb41d76a72d56149268371a7895ee
為 libpq 中所有連線執行緒設定 libcrypto 回呼。基於對 Jacob 的 OpenSSL 程式碼的分析,將加密雜湊計算遷移到 EVP,使得必須為所有連線執行緒設定 libcrypto 回呼,即使連線沒有使用 SSL。如果不設定回呼,當驗證期間 (例如 MD5 或 SCRAM) 呼叫加密雜湊時,如果加密雜湊計算發生錯誤,可能會導致執行緒不安全。因此,設定 libssl 和 libcrypto 狀態的邏輯被分成兩個部分,兩者都使用相同的鎖定,libcrypto 設定用於 SSL 和非 SSL 連線,而 SSL 連線則根據需要設定任何 libssl 狀態。在本提交之前,只有 SSL 連線會設定必要的 libcrypto 回呼,以確保在使用 libpq 中的多個並發執行緒時 (ENABLE_THREAD_SAFETY) 正確的執行緒鎖定。請注意,這僅適用於 OpenSSL 1.0.2 和 1.0.1 (HEAD 上支援的最舊版本),因為 1.1.0 有自己的內部鎖定,並且已放棄對 CRYPTO_set_locking_callback() 的支援。在使用 OpenSSL 1.0.1 和 1.0.2 的情況下,混合 SSL 和非 SSL 連線執行緒的多達 300 個執行緒的測試,在進行一些微基準測試後沒有顯示任何效能影響。可以使用 pgbench 並搭配 -C 和幾乎空白的腳本 (例如只有一個 \set meta-command) 來強調驗證請求,並且我們已經將其與一些自訂程式混合用於測試。 Reported-by: Jacob Champion Author: Michael Paquier Reviewed-by: Jacob Champion Discussion: https://postgr.es/m/fd3ba610085f1ff54623478cf2f7adf5af193cbb.camel@vmware.com https://git.postgresql.org/pg/commitdiff/2c0cefcd18161549e9e8b103f46c0f65fca84d99
Fujii Masao 提交
追蹤寫入和同步 WAL 資料到磁碟所花費的總時間。此提交新增了新的 GUC 參數 track_wal_io_timing。啟用此參數後,XLogWrite 寫入和 issue_xlog_fsync 同步 WAL 資料到磁碟的總時間將在 pg_stat_wal 中進行計數。此資訊可用於檢查 WAL 寫入和同步對效能的影響程度。啟用 track_wal_io_timing 將導致伺服器每次寫入或同步 WAL 時都向作業系統查詢目前時間,這可能會在某些平台上造成顯著的額外負擔。為了避免啟用 track_io_timing 的伺服器中出現此類額外負擔,此提交引入了 track_wal_io_timing 作為與 track_io_timing 分開的參數。請注意,walreceiver 的 WAL 寫入和同步活動尚未被追蹤。此提交還使伺服器追蹤 XLogWrite 寫入和 issue_xlog_fsync 同步 WAL 資料到磁碟的次數,無論 track_wal_io_timing 的設定如何,都在 pg_stat_wal 中進行追蹤。這些計數器可用於計算每個請求的 WAL 寫入和同步時間,例如。 Bump PGSTAT_FILE_FORMAT_ID。 Bump catalog version. Author: Masahiro Ikeda Reviewed-By: Japin Li, Hayato Kuroda, Masahiko Sawada, David Johnston, Fujii Masao Discussion: https://postgr.es/m/0509ad67b585a5b86a83d445dfa75392@oss.nttdata.com https://git.postgresql.org/pg/commitdiff/ff99918c625a84c91e7391db9032112ec8653623
強制在 walwriter 退出時將剩餘的 WAL 統計資訊傳送到統計資訊收集器。在 walwriter 的主迴圈中,只有在自上次傳送到達到 PGSTAT_STAT_INTERVAL 毫秒後,才會傳送 WAL 統計資訊訊息。這對於避免過度負載統計資訊收集器是必要的。但是,這可能會導致最近的 WAL 統計資訊在 walwriter 退出時未傳送。為了確保傳送所有 WAL 統計資訊,此提交使 walwriter 在因關閉請求而退出時,強制將剩餘的 WAL 統計資訊傳送到收集器。請注意,當 walwriter 以非零退出代碼 (例如,FATAL 錯誤) 退出時,這些剩餘的 WAL 統計資訊仍然可能未傳送。這是可以接受的,因為 walwriter 退出會導致伺服器崩潰,隨後的復原會丟棄所有統計資訊。因此,在這種情況下,不需要傳送剩餘的統計資訊。 Author: Masahiro Ikeda Reviewed-by: Fujii Masao Discussion: https://postgr.es/m/0509ad67b585a5b86a83d445dfa75392@oss.nttdata.com https://git.postgresql.org/pg/commitdiff/33394ee6f2433d3cc7785428a77cc9a813254df7
將關機檢查點期間收集的統計資訊傳送到統計資訊收集器。當請求關機時,檢查點程序會在退出之前執行檢查點或重新啟動點,並更新統計資訊。但是,先前檢查點程序不會將這些統計資訊傳送到統計資訊收集器。關機檢查點和重新啟動點被視為請求的檢查點,而不是計劃的檢查點,因此它們的數量在 pg_stat_bgwriter.checkpoints_req 欄位中計數。 Author: Masahiro Ikeda Reviewed-by: Fujii Masao Discussion: https://postgr.es/m/0509ad67b585a5b86a83d445dfa75392@oss.nttdata.com https://git.postgresql.org/pg/commitdiff/b82640df0062483431608b7e9e074255f03e6c02
Peter Eisentraut 提交
libpq: 移除已棄用的連線參數 authtype 和 tty。 authtype 參數已棄用,並在 commit d5bbe2aca55bc8 中停用,但環境變數仍被定義,因此即使該值沒有用處,也會使用 getenv 呼叫進行測試。此外,如果它存在,它將被複製,但永遠不會被釋放,因為清理程式碼已被移除。 tty 在 commit cb7fb3ca958ec8bd5a14e7 中被棄用,但圍繞它的基礎架構的大部分仍然存在。 Author: Daniel Gustafsson daniel@yesql.se Discussion: https://postgr.es/m/DDDF36F3-582A-4C02-8598-9B464CC42B34@yesql.se https://git.postgresql.org/pg/commitdiff/14d9b37607ad30c3848ea0f2955a78436eff1268
小型偵錯訊息調整。這使得刪除案例的措辭與更新案例匹配。 https://git.postgresql.org/pg/commitdiff/1657b37d7cce5c35e4c1d500f0a2f3736a087d82
在 bsearch() 之前新增邊界檢查以提高效能。在目前的延遲清理實作中,某些索引 AM (例如 btree 索引) 在 ambulkdelete 期間會為每個索引元組呼叫 lazy_tid_reaped(),以檢查索引元組是否指向 (收集的) 垃圾元組。在該函數中,我們只是簡單地呼叫 bsearch(),但是如果索引元組指向超出收集的垃圾元組範圍的堆元組,我們應該能夠在沒有 bsearch() 的情況下知道結果。因此,在求助於 bsearch() 之前新增一個簡單的邊界檢查。測試表明,這可以帶來顯著的效能優勢。 Author: Masahiko Sawada masahiko.sawada@2ndquadrant.com Discussion: https://postgres.tw/message-id/flat/CA+fd4k76j8jKzJzcx8UqEugvayaMSnQz0iLUt_XgBp-_-bd22A@mail.gmail.com
https://git.postgresql.org/pg/commitdiff/bbaf315309ed1194d451326cc8f4f59a45906408
Alexander Korotkov 提交
Thomas Munro 提交
pgbench:重構執行緒可移植性支援。現在,讓我們使用一個極簡的基於巨集的抽象,而不是維護一個不完整的 Windows POSIX 執行緒模擬。稍後的修補程式將擴展此功能,而無需提供更複雜的 pthread 模擬程式碼。(在後面的專案中可能需要更嚴重的可移植執行緒抽象,但這不是其中之一。) 修正了次要的附帶問題:使用 (pthread_t) 0 作為特殊值是不可以的,使用 == 比較 thread_t 值是不可以的,並且我們錯誤地假設 pthread 函數設定 errno。 Discussion: https://postgr.es/m/20200227180100.zyvjwzcpiokfsqm2%40alap3.anarazel.de https://git.postgresql.org/pg/commitdiff/b1d6a8f86813772b9198367a34c8ff8bff7fef9e
pgbench:改善時間邏輯。使用 pg_time_usec_t 和整數運算,取代 instr_time (struct timespec) 和 INSTR_XXX 巨集。除非使用 -C 模式,否則不要將連線時間包含在 TPS 中,而是分別報告。作者:Fabien COELHO coelho@cri.ensmp.fr 審閱者:Kyotaro Horiguchi horikyota.ntt@gmail.com 審閱者:Hayato Kuroda kuroda.hayato@fujitsu.com 討論:https://postgr.es/m/20200227180100.zyvjwzcpiokfsqm2%40alap3.anarazel.de https://git.postgresql.org/pg/commitdiff/547f04e7348b6ed992bd4a197d39661fe7c25097
新增遺失的 pthread_barrier_t。為 macOS 提供遺失的 pthread_barrier_t 型別和函數的簡單實作。討論:https://postgr.es/m/20200227180100.zyvjwzcpiokfsqm2%40alap3.anarazel.de https://git.postgresql.org/pg/commitdiff/44bf3d5083e151d772c5d6f656e3e162f573dced
pgbench:同步客戶端執行緒。在基準測試開始前,等待所有 pgbench 執行緒連接。這修正了一個問題,即某些連接可能需要很長時間才能建立,因為來自先前連接的鎖定競爭,導致結果不穩定且在高連接計數下產生錯誤結果。作者:Andres Freund andres@anarazel.de 作者:Fabien COELHO coelho@cri.ensmp.fr 審閱者:Marina Polyakova m.polyakova@postgrespro.ru 審閱者:Kyotaro Horiguchi horikyota.ntt@gmail.com 審閱者:Hayato Kuroda kuroda.hayato@fujitsu.com 審閱者:David Rowley dgrowleyml@gmail.com 討論:https://postgr.es/m/20200227180100.zyvjwzcpiokfsqm2%40alap3.anarazel.de https://git.postgresql.org/pg/commitdiff/aeb57af8e64000cc4288a7b8b8d7cf6040eae900
嘗試修正最近 pgbench commit 中的可移植性錯誤。1. 根據 lapwing 的說法,pg_time_usec_t 需要使用 INT64_FORMAT 列印,而不是 %ld,否則 32 位元系統會抱怨。2. 根據 whelk 的說法,某些 Windows 編譯器不喜歡未標記為 __stdcall
的執行緒函數;讓我們看看這是否能修正問題。https://git.postgresql.org/pg/commitdiff/68b34b2338f013cb025dea360b37a3b4fc930179
修正最近 pgbench commit 中的另一個可移植性錯誤。Commit 547f04e7 在建置 plpython 時,於 AIX/xlc 上產生錯誤。新的程式碼似乎與 commit a11cf433 安裝的 hack 不相容。由於無法存取 AIX 系統進行檢查,我猜測 <time.h> 可能需要 _POSIX_C_SOURCE
才能宣告標頭需要看到的內容,但 plpython.h 會取消定義它。目前,為了不破壞建置農場動物 hoverfly,只需將新的 pg_time_usec_t 支援移到 pgbench.c 中。也許稍後我們可以找出如何重新排列,以便將其放回標頭中以供更廣泛使用。討論:https://postgr.es/m/CA%2BhUKG%2BP%2BjcD%3Dx9%2BagyTdWtjpOT64MYiGic%2Bcbu_TD8CV%3D6A3w%40mail.gmail.com https://git.postgresql.org/pg/commitdiff/c427de427ac411039d5efd5d0dcc8a4e0c6da68d
使用條件變數取代緩衝區 I/O 鎖定。1. 等待緩衝區 I/O 的後端現在可以中斷。2. 如果目前正在執行 I/O 的後端發生錯誤,則等待的後端不會喚醒,直到該後端到達 AbortBufferIO() 並在 CV 上廣播。先前,任何等待者都會喚醒(因為 I/O 鎖定會自動釋放),然後忙碌迴圈,直到 AbortBufferIO() 清除 BM_IO_IN_PROGRESS。3. LWLockMinimallyPadded 已移除,因為現在將不再使用。作者:Robert Haas robertmhaas@gmail.com 審閱者:Thomas Munro thomas.munro@gmail.com 審閱者:Julien Rouhaud rjuju123@gmail.com 審閱者:Tom Lane tgl@sss.pgh.pa.us(早期版本,2016 年)討論:https://postgr.es/m/CA%2BhUKGJ8nBFrjLuCTuqKN0pd2PQOwj9b_jnsiGFFMDvUxahj_A%40mail.gmail.com 討論:https://postgr.es/m/CA+Tgmoaj2aPti0yho7FeEf2qt-JgQPRWb0gci_o1Hfr=C56Xng@mail.gmail.com https://git.postgresql.org/pg/commitdiff/d87251048a0f293ad20cc1fe26ce9f542de105e6
改善 struct BufferDesc 的註解。新增一個註解,說明每個緩衝區的 I/O 條件變數目前位於 BufferDesc 結構之外。後續 commit d8725104。回報者:Julien Rouhaud rjuju123@gmail.com 討論:https://postgr.es/m/20210311031118.hucytmrgwlktjxgq%40nol https://git.postgresql.org/pg/commitdiff/049d9b872db8a24b45709dbaed9a1051e92ed513
README.barrier 的小幅現代化。Itanium 非常罕見且已停止使用。ARM 無所不在。偏好使用 ARM 作為具有弱記憶體排序架構的範例。https://git.postgresql.org/pg/commitdiff/43c66624964aa1d2f519ad6be0c5ea8f170cf357
為復原恢復新增條件變數。使用 CV 取代睡眠迴圈,以便在恢復恢復或 postmaster 透過標準基礎架構退出時獲得快速反應時間。不幸的是,我們仍然需要每秒喚醒一次,以便在恢復暫停迴圈期間執行額外的輪詢。討論:https://postgr.es/m/CA%2BhUKGK1607VmtrDUHQXrsooU%3Dap4g4R2yaoByWOOA3m8xevUQ%40mail.gmail.com https://git.postgresql.org/pg/commitdiff/600f2f50b7a57c8481276450c9019fa7b3656411
為 walreceiver 關閉新增條件變數。使用這個新的 CV 等待 walreceiver 關閉,而無需睡眠/輪詢迴圈,同時也受益於標準的 postmaster 死亡處理。討論:https://postgr.es/m/CA%2BhUKGK1607VmtrDUHQXrsooU%3Dap4g4R2yaoByWOOA3m8xevUQ%40mail.gmail.com https://git.postgresql.org/pg/commitdiff/de829ddf23f69190efb4e0178704c4c4228e17cd
在恢復期間減少輪詢 postmaster 的頻率。自 commit 9f095299 和 f98b8476 以來,我們在 Linux 和 FreeBSD 上進行崩潰恢復期間根本不輪詢 postmaster 管道,但在其他作業系統上,我們仍然為每個 WAL 記錄執行此操作。在需要系統呼叫的作業系統上,降低輪詢頻率,但代價是在 postmaster 死亡後稍微延遲退出。這避免了昂貴的系統呼叫,據報導,這些呼叫會將 CPU 密集型恢復速度降低 10-30%。審閱者:Heikki Linnakangas hlinnaka@iki.fi 審閱者:Fujii Masao masao.fujii@oss.nttdata.com 審閱者:Michael Paquier michael@paquier.xyz 討論:https://postgr.es/m/CA%2BhUKGK1607VmtrDUHQXrsooU%3Dap4g4R2yaoByWOOA3m8xevUQ%40mail.gmail.com 討論:https://postgr.es/m/7261eb39-0369-f2f4-1bb5-62f3b6083b5e@iki.fi https://git.postgresql.org/pg/commitdiff/57dcc2ef3320de3e1aef6f668601e6ad2bdf88c4
特殊化檢查點排序函數。當排序可能大量的髒緩衝區時,檢查點可以受益於更快的排序例程。據報導,在大型緩衝區池系統上的一次改進是 1.4 秒 -> 0.6 秒。審閱者:Andres Freund andres@anarazel.de 討論:https://postgr.es/m/CA%2BhUKGJ2-eaDqAum5bxhpMNhvuJmRDZxB_Tow0n-gse%2BHG0Yig%40mail.gmail.com https://git.postgresql.org/pg/commitdiff/1b88b8908e751271933c076234fa085cda251421
修正新的 pthread 程式碼,使其遵守 --disable-thread-safety 設定。如果在 configure 時選擇不使用 threads,則不要嘗試編譯 src/port/pthread_barrier_wait.c。此問題由 build farm 成員 gaur 發現,因為其 pthread 實作存在問題,導致無法編譯此程式碼。由於使用了 --disable-thread-safety,因此不應嘗試編譯。缺陷存在於 commit 44bf3d50。報告者:Tom Lane tgl@sss.pgh.pa.us 討論:https://postgr.es/m/2568537.1615603606%40sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/de91c3b976cfacddacd45a9b52046264c0e44b11
Bruce Momjian 推送了更新
C 註解:改善 GiST NSN 和 GistBuildLSN 的描述。GiST 索引很複雜,因此在程式碼中添加更多細節可能有助於他人理解。討論:https://postgr.es/m/20210302164021.GA364@momjian.us https://git.postgresql.org/pg/commitdiff/845ac7f847a25505e91f30dca4e0330b25785ee0
教學文件:陸地高度應為 "elevation"(海拔),而不是 "altitude"(高度)。這是 92c12e46d5 的後續補丁。在該補丁中,我們根據以下細節,將文件中的 "altitude" 更名為 "elevation":https://mapscaping.com/blogs/geo-candy/what-is-the-difference-between-elevation-relief-and-altitude 此更新將教學 SQL 檔案重新命名,以符合文件。報告者:max1@inbox.ru 討論:https://postgr.es/m/161512392887.1046.3137472627109459518@wrigleys.postgresql.org 向後移植至:9.6 https://git.postgresql.org/pg/commitdiff/2950ff32f31d073ea4be4f5f9b73249131f42bd7
Peter Geoghegan 推送了更新
在 nbtree VACUUM 中,不要考慮新插入的 tuple。移除 nbtree VACUUM 中關於 "stale stats"(過時統計)的整個概念(停止關心涉及已插入 tuple 數量的統計)。同時移除 master 分支上的 vacuum_cleanup_index_scale_factor GUC/參數(儘管僅在 postgres 13 上禁用它們)。vacuum_cleanup_index_scale_factor/stats 介面使得 nbtree AM 部分負責決定何時需要更新 pg_class.reltuples 統計資訊。這似乎與索引 AM API 的精神相悖,因為當不方便時,索引 AM 的批量刪除和清理回呼函數實際上沒有必要提供準確的統計資訊。核心程式碼負責此事。(索引 AM 有權根據自身的考量來執行或不執行某些種類的延遲清理,例如頁面刪除和回收,但這與 pg_class.reltuples/num_index_tuples 無關。)在 commit b07642db 引入 autovacuum_vacuum_insert_threshold 功能之前,此問題相當無害,該功能與 vacuum_cleanup_index_scale_factor 機制產生了不良的交互作用:它使得插入驅動的自動清理執行完整的索引掃描,即使這樣做沒有實際的好處。這與 append-only insert benchmark [1] 的衰退有關。此外,在僅執行清理的 nbtree VACUUM 期間執行完整索引掃描的剩餘情況表明,最終 tuple 計數僅是一個估計值。這樣可以防止 vacuumlazy.c 在這些情況下設定索引的 pg_class.reltuples(現在僅當 vacuumlazy.c 具有用於 nbtree 批量刪除的 TIDs 時才會更新 pg_class)。這可以說是修復了 deduplication 相關的錯誤修復 commit 48e12913 中的一個疏忽。[1] https://smalldatum.blogspot.com/2021/01/insert-benchmark-postgres-is-still.html 作者:Peter Geoghegan pg@bowt.ie 審閱者:Masahiko Sawada sawada.mshk@gmail.com 討論:https://postgr.es/m/CAD21AoA4WHthN5uU6+WScZ7+J_RcEjmcuH94qcoUPuB42ShXzg@mail.gmail.com 向後移植:13-,加入了 autovacuum_vacuum_insert_threshold 的版本。 https://git.postgresql.org/pg/commitdiff/9f3665fbfc34b963933e51778c7feaa8134ac885
VACUUM ANALYZE:始終更新 pg_class.reltuples。vacuumlazy.c 有時無法更新每個索引的 pg_class 條目(以確保 pg_class.reltuples 是最新的),即使 analyze.c 假設 VACUUM ANALYZE 期間必須已經發生這種情況。至少有幾個原因可以解釋這種情況。例如,根據 2006 年 commit e57345975cf 建立的 amvacuumcleanup() 例程的約定,當索引 AM 表明其統計資訊僅是估計值時,vacuumlazy.c 可能無法更新 pg_class。停止假設必須在 VACUUM ANALYZE 中使用準確的統計資訊更新 pg_class -- 在所有情況下,與表關係同時更新索引的 pg_class。這樣,VACUUM ANALYZE 將永遠不會無法保持 pg_class.reltuples 保持相當準確。與舊方法相比,這種方法的唯一缺點是,對於其堆積關係最終具有相同不準確值的索引,它可能會不準確地設定 pg_class.reltuples。這似乎不太糟糕。在任何 VACUUM ANALYZE 期間,我們已經一致地為堆積/表關係調用了兩次 vac_update_relstats()(以更新 pg_class)-- 一次在 vacuumlazy.c 中,一次在 analyze.c 中。現在,我們確保至少調用一次(儘管通常是兩次)每個索引的 vac_update_relstats()。這是對 commit 9f3665fb 的後續工作,該提交處理了 btvacuumcleanup() 中的問題。從技術上講,這修復了一個不相關的問題。在 commit 9f3665fb 之後,btvacuumcleanup() 不再提供準確的 num_index_tuples 值(當在相關的 VACUUM 操作期間沒有 btbulkdelete() 調用時),但是 hashvacuumcleanup() 多年來一直以相同的方式工作。作者:Peter Geoghegan pg@bowt.ie 審閱者:Masahiko Sawada sawada.mshk@gmail.com 討論:https://postgr.es/m/CAH2-WzknxdComjhqo4SUxVFk_Q1171GJO2ZgHZ1Y6pion6u8rA@mail.gmail.com 向後移植:13-,就像 commit 9f3665fb 一樣。 https://git.postgresql.org/pg/commitdiff/5f8727f5a679452f7bbdd6966a1586934dcaa84f
文件:B-Tree 只有一個額外的參數。commit 9f3665fb 中的疏忽。向後移植:13-,就像 commit 9f3665fb 一樣。 https://git.postgresql.org/pg/commitdiff/3f0daeb02f8dd605f89de9aa2349137c09cc7fb4
加回 vacuum_cleanup_index_scale_factor 參數。Commit 9f3665fb 刪除了 vacuum_cleanup_index_scale_factor 儲存參數。但是,當跨主要版本移動時,這會產生 dump/reload 風險。加回 vacuum_cleanup_index_scale_factor 參數(但不是同名的 GUC),僅僅是為了避免使用 pg_upgrade 等工具時出現問題。該參數保持禁用且未記錄。沒有向後移植到 Postgres 13,因為 vacuum_cleanup_index_scale_factor 僅由 REL_13_STABLE 版本的 master 分支 commit 9f3665fb 首先禁用 -- 該參數在 REL_13_STABLE 上已經是這樣了。討論:https://postgr.es/m/YEm/a3Ko3nKnBuVq@paquier.xyz https://git.postgresql.org/pg/commitdiff/effdd3f3b633e88feaa675377075f02ecc99aee4
在 nbtree VACUUM 期間節省一些週期。避免在僅清理的 nbtree VACUUM 操作中,沒有已刪除但尚未回收的頁面要回收的常見情況下,不必要地呼叫 RelationGetNumberOfBlocks()。這是對 commit e5d8a999 的後續處理,該 commit(除其他事項外)教導「跳過完整掃描」的 nbtree VACUUM 機制,僅在索引中已刪除頁面的絕對數量被認為過多時才觸發完整索引掃描。https://git.postgresql.org/pg/commitdiff/7bb97211a5589265f3f88183ae9353639ab184c6
整合 nbtree VACUUM 元頁面例程。簡化 _bt_vacuum_needs_cleanup()
函式的簽名(現在只需要一個 'rel' 參數),並將其移至 nbtpage.c 中與其同級函式相鄰的位置。我認為 _bt_vacuum_needs_cleanup()
最初位於 nbtree.c 中,是因為 include 依賴性問題。現在這已不再是問題。這是對 commit 9f3665fb 的後續處理。https://git.postgresql.org/pg/commitdiff/02b5940dbea17d07a1dbcba3cbe113cc8b70f228
Robert Haas 推送了
重構並泛化 ParallelSlot 機制。建立一個包裝器物件 ParallelSlotArray,以封裝槽的數量和槽陣列本身,以及其他一些相關的資訊。這減少了我們必須在各處傳遞的參數數量。允許 ParallelSlotArray 在單個叢集中包含連接到不同資料庫的槽。此機制的當前客戶端不需要此功能,但預計將被未來的修補程式使用。延遲連接到資料庫,直到我們實際需要連接進行某些操作。這是 vacuumdb 和 reindexdb 的一個小行為變更。如果您指定的作業數量大於物件數量,則額外的連線現在將不會被使用。但是,另一方面,如果您指定的作業數量太大以至於會失敗,則以前該失敗會在任何操作實際開始之前發生,而現在則不會。Mark Dilger 審閱,我進行了審閱。討論:http://postgr.es/m/12ED3DA8-25F0-4B68-937D-D907CFBF08E7@enterprisedb.com 討論:http://postgr.es/m/BA592F2D-F928-46FF-9516-2B827F067F57@enterprisedb.com https://git.postgresql.org/pg/commitdiff/f71519e545a34ece0a27c8bb1a2b6e197d323163
清楚說明恢復暫停是否已生效。先前,程式碼和文件似乎基本上都假定對 pg_wal_replay_pause() 的呼叫會立即發生,但事實並非如此,因為我們僅在某些地方檢查暫停。這意味著,使用此函式然後希望在之後執行其他操作的工具,這些操作取決於暫停是否已生效,則不知道需要等待多長時間才能確保不再重播 WAL。為了避免這種情況,新增一個新的函式 pg_get_wal_replay_pause_state(),該函式傳回 'not paused'、'paused requested' 或 'paused'。在呼叫 pg_wal_replay_pause() 之後,狀態將立即從 'not paused' 變更為 'pause requested';當啟動程序注意到這一點時,狀態將變更為 'paused'。為了向後相容性,pg_is_wal_replay_paused() 仍然存在,並且傳回與以前相同的內容:如果已請求暫停,無論它是否已生效,則傳回 true;如果沒有,則傳回 false。文件已更新以進行澄清。為了提高快速確認暫停請求生效的可能性,調整了一些設定,以便在發出暫停請求時,WaitForWALToBecomeAvailable 將迅速達到對 recoveryPausesHere() 的呼叫。Dilip Kumar,由 Simon Riggs、Kyotaro Horiguchi、Yugo Nagata、Masahiko Sawada 和 Bharath Rupireddy 審閱。討論:http://postgr.es/m/CAFiTN-vcLLWEm8Zr%3DYK83rgYrT9pbC8VJCfa1kY9vL3AUPfu6g%40mail.gmail.com https://git.postgresql.org/pg/commitdiff/32fd2b57d7f64948e649fc205c43f007762ecaac
新增 pg_amcheck,一個 contrib/amcheck 的 CLI。這使得針對大量關係執行 contrib/amcheck 實作的損壞檢查,並以易於理解的格式獲得結果變得容易得多。它具有多種選項,用於選擇要檢查的關係和要執行的檢查,並且如果您願意,它可以並行執行檢查。Mark Dilger,由 Peter Geoghegan 和我審閱。討論:http://postgr.es/m/12ED3DA8-25F0-4B68-937D-D907CFBF08E7@enterprisedb.com 討論:http://postgr.es/m/BA592F2D-F928-46FF-9516-2B827F067F57@enterprisedb.com https://git.postgresql.org/pg/commitdiff/9706092839db2c8c93860674e426a917635438c3
嘗試修正編譯器警告。根據 Peter Geoghegan 的報告。討論:http://postgr.es/m/CAH2-WznpwULZ3uJ1_6WXvNMXYbOy8k8tYs3r=qSdGmZeRd6tDw@mail.gmail.com https://git.postgresql.org/pg/commitdiff/d60e61de4fb4a8e7ca88204c2c409e7380887d76
調整 perl 樣式。每個 buildfarm 成員 crake。https://git.postgresql.org/pg/commitdiff/7a1527c02c147a4107490662cb1872524c54a8ae
將 PG_USED_FOR_ASSERTS_ONLY 移到初始化器之前。Erik Rijkers 報告了編譯失敗,我認為這可能是原因。https://git.postgresql.org/pg/commitdiff/ac445955852fe6bc0e02e87a409f25ab6e0a82d6
修正 pg_amcheck 的 004_verify_heapam.pl 中的可移植性問題。測試 #12 覆寫了一個 1 位元組的 varlena 標頭,使其看起來像 4 位元組 varlena 標頭的初始位元組,但結果取決於位元組順序。此外,覆寫位元組之後的位元組 "abc" 將根據位元組順序以不同的方式解釋。以感知位元組順序的方式覆寫 4 個位元組。測試 #13 不小心設法依賴了 TOAST_MAX_CHUNK_SIZE,該大小根據 MAXIMUM_ALIGNOF 略有不同。無論如何,這不是重點,因此使 regexp 對預期的區塊數量不敏感。Mark Dilger 討論:http://postgr.es/m/A80D68F6-E38F-482D-9522-E2FB6AAFE8A1@enterprisedb.com https://git.postgresql.org/pg/commitdiff/661125612706b1d0d5ed9f12d18908b08512a7eb
嘗試避免 IPC::Run 中明顯的平台相依性。很難相信,但來自新的 pg_amcheck 的 buildfarm 結果表明 command_checks_all() 在某些機器上執行 shell 擴展,而在其他機器上則不執行,這顯然是由 IPC::Run 中的底層行為差異所致。讓我們看看是否可以透過將 '-S' 作為單個參數而不是將 '-S' 和 '' 作為兩個單獨的參數傳遞來解決此問題 - 並確認這才是真正的問題。在 jacana 和 hoverfly 上觀察到失敗。Mark Dilger 討論:http://postgr.es/m/9E76E46A-48B2-4869-BD0C-422204C1F767@enterprisedb.com https://git.postgresql.org/pg/commitdiff/f371a4cdba6dc805acd608cc63a7089b57cb4e9e
pg_amcheck:嘗試修正更多測試失敗。避免在 command_checks_all() 中使用不可移植的選項排序。在交換器之前使用裸命令列引數並非在所有地方都有效。每個 buildfarm 成員 drongo 和 hoverfly。避免測試訊息「role \"%s\" does not exist」,因為某些 buildfarm 機器報告了不同的錯誤。例如,fairywren 抱怨「SSPI authentication failed for user \"%s\"」。Mark Dilger 討論:http://postgr.es/m/9E76E46A-48B2-4869-BD0C-422204C1F767@enterprisedb.com 討論:http://postgr.es/m/F0A1FD70-A2F4-4528-8A03-8650CAEC0554%40enterprisedb.com https://git.postgresql.org/pg/commitdiff/24189277f6ff3169b15c7bc82926a372ca7f2dbf
pg_amcheck:持續嘗試修正測試。Commit 24189277f6ff3169b15c7bc82926a372ca7f2dbf 設法移除了兩個檢查 "no such user" 錯誤的地方之一,卻把另一個留在旁邊。所以也移除那個。事實上,移除整個測試,因為這個測試的重點是觀察失敗時會收到哪個訊息。https://git.postgresql.org/pg/commitdiff/b9164eab208342d685638fc90048ffaa2688cb47
在 pg_amcheck 測試中,不要依賴 perl 的 Q/q pack 程式碼。它在所有平台上的所有 perl 版本上都無法運作。為了避免 endian-ness 問題,為欄位 a 選擇一個新的值,其高 4 個位元組與低 4 個位元組相同。嘗試使其成為在頁面中任何附近不太可能發生的值。討論:http://postgr.es/m/29DA079B-0658-4E66-BDAA-0EFD7B64D9C6@enterprisedb.com https://git.postgresql.org/pg/commitdiff/945d2cb7d0255e296a55f3e9febb5dce6eaccc3e
Etsuro Fujita 送出另一個修訂版的 patch,用於在 postgres_fdw 節點上實作非同步 append。
Kyotaro HORIGUCHI 送出一個 patch,使用 wal_level=minimal 執行 011_crash_recovery.pl,並確保已發布的 XID 是持久的。
Ibrar Ahmed 送出另一個 pg_rewind 的修訂版 patch,修正了在伺服器剛被升級時,判斷 TLI 的方式,除了檢查 checkpoint 上的 ThisTimeLineID 之外,還檢查 control file 中的 minRecoveryPointTLI。
Ibrar Ahmed 送出另一個 patch,將 popcount 暴露給 SQL。
Kota Miyake 送出另一個 patch,修正 pgbench 的 \sleep 命令的運作方式,要求它接受一個整數引數。
Michael Banck 送出另一個 patch,新增一個新的 PGC_ADMINSET guc 上下文和 pg_change_role_settings 預設角色。
Andrey Borodin 送出另一個 patch,為 gist_btree 類型新增用於排序 GiST 建立的 Sortsupport。
Pavel Stěhule 送出一個 patch,為類型 record 新增運算子 ? 和 ->>,以及函數 record_keys 和 record_each_text。
Ajin Cherian 送出一個 patch,使 stream_prepare_cb 成為可選的,這允許插件不允許在邏輯複寫中同時啟用 streaming 和 two_phase。
Ibrar Ahmed 送出另一個 patch,在規劃時評估表達式,適用於另外兩種情況。
Joel Jacobson 送出另外四個修訂版的 patch,新增視圖 pg_permissions 和 pg_ownerships,這大大簡化了建立這些東西的查詢。
Ibrar Ahmed 送出另一個 patch,實作系統版本的時間表。
Tomáš Vondra 送出另外兩個修訂版的 patch,實作 BRIN 多範圍索引。
Tomáš Vondra 和 Stephen Frost 交換了 patch,透過在啟用 track_io_timing 時包含 I/O 計時,來改善 auto-vacuum 和 auto-analyze 的記錄。此外,對於 auto-analyze,新增讀取速率和 dirty 速率,類似於歷史上為 auto-vacuum 記錄這些資訊的方式。
Masahiro Ikeda 和 Fujii Masao 交換了 patch,在關閉時為 walwriter 和 checkpointer 發送統計資訊。
Dilip Kumar 和 Justin Pryzby 交換了 patch,為表實作自訂壓縮方法。
Bharath Rupireddy 送出另一個 patch,實作 EXPLAIN [ANALYZE] REFRESH MATERIALIZED VIEW。
Greg Nancarrow 和 Hou Zhijie 交換了 patch,實作並行 INSERT (INTO ... SELECT ...)。
Ibrar Ahmed 和 Kazutaka Onishi 交換了 patch,在外部表上實作 TRUNCATE。
Peter Smith 和 Ajin Cherian 交換了 patch,實作兩階段交易的邏輯解碼。
Tatsuo Ishii 送出兩個 patch,使其可以在 pgbench 中使用 COPY FREEZE。
Peter Smith 送出一個 patch,讓 tablesync worker 有機會查看是否可以立即退出(因為它已經趕上),而無需先處理訊息才能發現這一點。
Yugo Nagata 送出另一個 patch,實作增量具體化視圖。
Arseny Sher 送出一個 patch,增加用於僅索引掃描的 vm 快取。
Peter Eisentraut 送出另一個 patch,新增對使用符合 SQL 標準且可移植到其他實作的功能主體,編寫語言 SQL 的 CREATE FUNCTION 和 CREATE PROCEDURE 陳述式的支援。
Heikki Linnakangas 送出另一個 patch,為了安全和清晰起見,移動了一些 ResourceOwnerEnlarge() 呼叫,使 resowners 更容易擴展,並在可用時使用 64 位元的 murmur hash 以加快速度。
Tomáš Vondra 送出另一個 patch,透過新的 GUC remove_temp_files_after_crash 控制崩潰後移除暫存檔。
Jacob Champion 送出另外兩個修訂版的 patch,將客戶端的 DN 儲存在 port->peer_dn 中,並使用它從所有 auth 後端記錄已驗證的身分。
Joel Jacobson 送出另一個 patch,實作 regexp_positions。
Justin Pryzby 送出一個 patch,使 pg_dump 在 getBlobs 中使用游標,以減輕數百萬個大型物件時的巨大記憶體使用。
Tomáš Vondra 送出另一個 patch,使 GROUP BY 更有效率。
Erica Zhang 送出兩個修訂版的 patch,為 contrib 下的 pg_stat_statements 相容性驗證新增一些測試。
Matthias van de Meent 送出三個修訂版的 patch,當頁面的行指標陣列具有尾隨的未使用 ItemId 時,會截斷該陣列。 這將允許重複使用實際上是空閒空間的空間來儲存資料以及新的行指標,而不是僅將其保留給行指標。 另一個好處是,HasFreeLinePointers hint-bit 優化現在不會提示陣列末尾的空閒行指標,稍微提高了空閒行位置的特異性;並避免我們需要搜尋到陣列末尾,如果所有其他條目都已填滿。
Magnus Hagander 送出另一個 patch,新增 PROXY 協定支援。
Floris Van Nee 送出另一個 patch,允許將元組插入到幾乎為空的頁面中。
Marcus Wanner 送出一個 patch,為輸出插件的 filter_prepare 回呼新增一個 xid 引數。
Kyotaro HORIGUCHI 和 Fujii Masao 交換了 patch,將 stats collector 使用的暫存儲存從檔案變更為共享記憶體。
Amul Sul 和 Ibrar Ahmed 交換了 patch,放入一些機制,使其可以實作 ALTER SYSTEM READ {ONLY|WRITE}。
Masahiko Sawada 送出另一個 patch,使 autovacuum 記錄更具資訊性。
Bharath Rupireddy 送出另一個 patch,為 multi- 和 single insert 新增新的表 AM,並將相同的用於 CTAS、REFRESH MATERIALIZED VIEW 和 COPY。
Yuzuko Hosoya 送出另一個 patch,使用 DISCARD ALL 釋放參考完整性的 SPI 計劃。
John Naylor 送出一個 patch,以擺脫文件中的 <foreignphrase>
標籤。
John Naylor 送出一個 patch,使 popcount xor 在緩衝區層級嘗試間接定址。
Masahiko Sawada 送出一個 patch,從 vacuumlazy.c 中移除不需要的 bsearch。
Craig Ringer 送出另一個 patch,將目標 LWLock*
和 tranche ID 傳遞給 LWLock tracepoint,新增到 LWLock 常式中的 tracepoint,並在啟動時為後端類型和 postmaster pid 新增 SDT tracepoint。
Bharath Rupireddy 送出兩個修訂版的 patch,使 check_publication_add_relation 中的錯誤訊息更具資訊性且一致。
Iwata Aya、Álvaro Herrera 和 Tom Lane 交換了 patch,為 libpq 新增追蹤功能。
David Rowley 提交了 PathTarget 和 RestrictInfo 揮發性的快取修補程式的另外兩個修訂版本,允許 estimate_num_groups() 回傳更多關於估算的細節,允許 simplehash.h 的使用者執行直接刪除,新增一個 Result Cache 執行器節點,並移除 nodeResultCache.c 中的程式碼重複。
Nathan Bossart 和 Laurenz Albe 交換了文件 ALTER ROLE ... SET ROLE 的修補程式。
Mark Dilger 和 Robert Haas 交換了修補程式以新增前端工具程式 pg_amcheck。
Peter Geoghegan 提交了另一個修訂版本的修補程式,用於回收在相同 VACUUM 期間刪除的頁面。
Thomas Munro 提交了另一個修訂版本的修補程式,用於在共享記憶體中追蹤關聯大小,為 smgrnblocks() 提供無鎖定的快速路徑,並將 fifo 更新為 lru 以清除有效的快取。
Thomas Munro 提交了一個修補程式,透過使用 pg_procno 而非掃描 ProcArray 並追蹤啟動程序,使 ProcSendSignal() 更有效率。
Hou Zhijie 提交了另一個修訂版本的修補程式,用於在執行 REFERENCES 表格的 INSERT INTO 時,避免 RI 觸發器中的 CommandCounterIncrement。
Álvaro Herrera 提交了另一個修訂版本的修補程式,用於實作 ALTER TABLE ... DETACH PARTITION CONCURRENTLY。
Álvaro Herrera 提交了另兩個修訂版本的修補程式,用於實作 libpq 的批次/管線支援。
Fabien COELHO 和 Dean Rasheed 交換了修補程式,以將虛擬隨機置換函數新增至 pgbench。
Bruce Momjian 提交了另一個修訂版本的修補程式,用於新增金鑰管理。
Takayuki Tsunakawa 提交了另一個修訂版本的修補程式,以加速 COPY FROM 到具有外部分割區的表格。
Hao Wu 提交了一個修補程式,旨在修復在節點升級後 HotStandbyActive() 回傳 true 的錯誤。
Takayuki Tsunakawa 提交了兩個修訂版本的修補程式,用於修復在計算要失效的緩衝區數量時的溢位。
Andrey Borodin 提交了另一個修訂版本的修補程式,使所有 SLRU 緩衝區大小都可配置。
Tom Lane 提交了兩個修訂版本的修補程式,用於清理 PL/pgsql 中變數使用的文件。
Thomas Munro 提交了另一個修訂版本的修補程式,用於在崩潰恢復中執行檢查點和 bgworker,在崩潰恢復後記錄緩衝區統計資訊,並使其可以不等待恢復結束檢查點。
Justin Pryzby 提交了另兩個修訂版本的修補程式,允許為 wal_compression 使用替代的壓縮方法。
Mark Rofail 和 Justin Pryzby 交換了修補程式以實作外部鍵陣列。
Pavel Stěhule 提交了另一個修訂版本的修補程式,用於實作結構描述變數。
Michaël Paquier 和 Soumyadeep Chakraborty 交換了修補程式以修復 PITR 和 2PC 之間的不協調。
Pavel Stěhule 提交了另兩個修訂版本的修補程式,以將 #routine_label pragma 新增至 PL/pgsql。
Thomas Munro 提交了一個修補程式,用於將 bsearch 和 unique 範本新增至 sort_template.h,為一些常見的純量類型提供排序/搜尋專業化,在明顯的位置使用 qsort_oid() 及其相關函數,為 ItemPtrData 提供專業化的排序/搜尋常式,在各個地方使用 qsort_itemptr() 及其相關函數,透過使用基於 48 位元整數(可以透過減法比較,避免分支)的“編碼”格式,專業化 HeapTuple 排序常式以供 ANALYZE 使用,專業化 tidbitmap.c 中的頁面表格排序常式,專業化 nbtree 程式碼中的一些排序/搜尋常式,並專業化 multixact.c 使用的排序常式。
Julien Rouhaud 提交了另一個修訂版本的修補程式,用於將 pg_stat_statements 查詢攪亂移動到核心,在 pg_stat_activity 和 log_line_prefix 中公開 queryid,並在 verbose explain 中公開查詢識別符。
Dmitry Dolgov 提交了另一個修訂版本的修補程式,用於引入跳過掃描。
Julien Rouhaud 提交了另一個修訂版本的修補程式,用於為 REINDEX 命令新增新的 OUTDATED 過濾機制,並為 reindexdb 新增相應的 --outdated 選項。
Alexander Lakhin 提交了一個修補程式,用於在 pgwin32_open 中使用 microsoft_native_stat。
Thomas Munro 提交了另兩個修訂版本的修補程式,用於在 Linux 上為 SyncDataDirectory() 選擇性地使用 syncfs()。