2025年9月25日: PostgreSQL 18 釋出!

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

釋出於 2021-11-01,作者:PWN
PWN

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

萬聖節快樂!

PostgreSQL 產品新聞

pg_statement_rollback v1.3 釋出,這是一個添加了伺服器端事務並支援語句級回滾的擴充套件。釋出

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。

已應用補丁

Michaël Paquier 提交

Heikki Linnakangas 提交

  • 澄清一些平衡合併程式碼中的邏輯。在 selectnewtape() 中,使用 'nOutputTapes' 而不是 'nOutputRuns' 來檢查是開始一個新 tape 還是將一個新 run 追加到現有 tape。在達到 'maxTapes' 之前,nOutputTapes 始終等於 nOutputRuns,因此它不會改變邏輯,但將 tape 數量與 tape 數量進行比較似乎更合乎邏輯。此外,目前 maxTapes 在合併開始後從未被修改,但這樣編寫的程式碼即使被修改也會繼續工作。(儘管 nOutputRuns == nOutputTapes 的斷言將需要被移除,並且使用 nOutputRuns % nOutputTapes 將執行均勻分佈到 tape 上可能無法很好地完成)。類似地,在 mergeruns() 中,更改為 USEMEM(state->tape_buffer_mem) 來考慮 tape 緩衝區使用的記憶體。它目前等於 availMem,但 tape_buffer_mem 更直接且面向未來。例如,如果我們更改了邏輯,只將剩餘記憶體的一半分配給 tape 緩衝區,USEMEM(state->tape_buffer_mem) 仍然是正確的。Coverity 對此表示不滿。希望這個補丁能幫助它更好地理解邏輯。感謝 Tom Lane 的初步分析。https://git.postgresql.org/pg/commitdiff/166f94377c886516ca986ef8a623cd2e854fe911

Robert Haas 提交

Thomas Munro 推送

Daniel Gustafsson 提交

Fujii Masao 提交

  • 改進 FDW 在沒有有效選項時報告的 HINT 訊息。當 CREATE 或 ALTER 命令中給定的選項無效時,外部資料包裝器的驗證器函式會提供一個 HINT 訊息,其中包含物件有效選項的列表。以前,postgresql_fdw_validator() 以及 postgres_fdw 和 dblink_fdw 的驗證器函式即使在物件中沒有有效選項時也這樣工作,這可能導致 HINT 訊息為空列表(因為沒有有效選項)。例如,ALTER FOREIGN DATA WRAPPER postgres_fdw OPTIONS (format 'csv') 會報告以下 ERROR 和 HINT 訊息。這種行為令人困惑。ERROR:無效選項“format” HINT:在此上下文中有效選項是: file_fdw 中沒有此類問題。file_fdw 的驗證器函式在這種情況下會報告 HINT 訊息“在此上下文中沒有有效選項。”。此提交改進了 postgresql_fdw_validator() 以及 postgres_fdw 和 dblink_fdw 的驗證器函式,使它們也這樣做。例如,此更改將導致上述 ALTER FOREIGN DATA WRAPPER 命令報告以下訊息。ERROR:無效選項“nonexistent” HINT:在此上下文中沒有有效選項。作者:Kosei Masumura 審閱者:Bharath Rupireddy, Fujii Masao 討論:https://postgr.es/m/557d06cebe19081bfcc83ee2affc98d3@oss.nttdata.com https://git.postgresql.org/pg/commitdiff/5fedf7417b69295294b154a219edd8a26eaa6ab6

Jeff Davis 推送

Amit Kapila 提交

Magnus Hagander 已推送

Peter Geoghegan 提交

Tom Lane 提交

  • 改進 contrib/amcheck's CREATE INDEX CONCURRENTLY 的測試。提交 fdd965d07 和 3cd9c3b92 透過併發啟動兩個獨立的 pgbench 執行來測試 CREATE INDEX CONCURRENTLY。這是必需的,以便只有一個客戶端執行緒執行 CREATE INDEX CONCURRENTLY,從而避免兩個 CIC 之間的死鎖。然而,有一種更好的方法,就是使用一個廣告鎖來防止併發的 CIC。這更好,部分原因在於測試程式碼更短、更易讀,但主要是因為它會自動擴充套件以啟動適量的 CIC 相對於 INSERT 事務的數量。如提交的,通常一半到四分之三的 CIC 事務是無用的,因為 INSERT 事務已經停止。順便,刪除了 background_pgbench,它被新增以支援這些測試,現在不再需要了。如果我們以後發現它的用途,我們可以隨時重新新增它。回溯到 v12;舊版本的 pgbench 缺少此方法所需的條件執行功能。Tom Lane 和 Andrey Borodin 討論:https://postgr.es/m/139687.1635277318@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/7f580aa5d88a9b03d66fcb9a1d7c4fcd69d9e126

  • 加速 snprintf.c 中整數的列印。由於唯一可能的除數是 8、10 和 16,因此使用三個複製品並使用常量除數替換除法迴圈不會增加太多程式碼空間。在大多數機器上,除以常量比除以任意值便宜得多。一個測試僅 snprintf("foo %d") 的微基準測試,使用一個 9 位數字,對我來說(tgl)顯示速度提高了約 2 倍。Postgres 的大部分程式碼並不那麼依賴於 snprintf 的速度,因此在實際情況中的效果幾乎無法衡量。儘管如此,節省一個週期就是贏得一個週期。Arjan van de Ven 討論:https://postgr.es/m/40a4b32a-b841-4667-11b2-a0baedb12714@linux.intel.com 討論:https://postgr.es/m/6e51c644-1b6d-956e-ac24-2d1b0541d532@linux.intel.com https://git.postgresql.org/pg/commitdiff/3c17926eedd51c4094db7c62f59950918044ab1c

  • 更新時區資料檔案至 tzdata release 2021e。斐濟、約旦、巴勒斯坦和薩摩亞的 DST 法規變更。巴貝多、庫克群島、蓋亞那、紐埃、葡萄牙和湯加的歷史修正。此外,Pacific/Enderbury 時區已重新命名為 Pacific/Kanton。以下時區已合併到附近人口更多、時鐘自 1970 年以來一致的時區:Africa/Accra、America/Atikokan、America/Blanc-Sablon、America/Creston、America/Curacao、America/Nassau、America/Port_of_Spain、Antarctica/DumontDUrville 和 Antarctica/Syowa。https://git.postgresql.org/pg/commitdiff/937aafd6d5580b81134c7f303d04cf7561ad0309

  • 測試和記錄 plpgsql 中初始化交叉引用的行為。我們有一個測試表明一個變數在其自身的初始化表示式中,以及在同一塊中的先前表示式中是不可引用的。它**可以**在同一塊中的後續表示式中引用,但據我所知,沒有測試用例能覆蓋到這一點。新增一個,並新增一些錯誤案例。此外,記錄這是可能的,因為文件未能涵蓋這一點。根據 tomas at tuxteam 的提問。我個人認為沒有必要回溯此更改,但我們應該確保將來不會破壞它。討論:https://postgr.es/m/20211029121435.GA5414@tuxteam.de https://git.postgresql.org/pg/commitdiff/a2a731d6c9db0ba650aa6f7c4fe349ccf712f74d

Peter Eisentraut 提交