PostgreSQL 每週新聞 - 2021 年 8 月 1 日

由 PWN 於 2021-08-02 發布
PWN

PostgreSQL 每週新聞 - 2021 年 8 月 1 日

PostgreSQL 新聞

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

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

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

已套用的修補程式

Michaël Paquier 推送了

David Rowley 推送了

Tom Lane 推送了

Dean Rasheed 推送

  • 允許數值比例為負數或大於精度。以前,當指定 NUMERIC(precision, scale) 時,比例必須在範圍 [0, precision] 內,這是根據 SQL 規範。此提交將允許比例的範圍擴展到 [-1000, 1000],獨立於精度(其有效範圍仍然是 [1, 1000])。負比例意味著在小數點之前進行捨入。例如,可以使用比例為 -3 的列來將值捨入到最接近的千位。請注意,顯示比例仍然是非負數,因此在這種情況下,顯示比例將為零,並且將顯示小數點之前的所有數字。大於精度的比例支援小數點後立即有零的小數值。藉此機會整理打包、解包和驗證 typmod 整數內容的程式碼,將其封裝在一小組新的內聯函式中。增加 catversion,因為數值欄位的 atttypmod 允許的內容已變更。這不是需要重新初始化資料庫的變更,但 typmod 中的負比例值會使舊的後端感到困惑。Dean Rasheed,Tom Lane 進行了額外的改進。由 Tom Lane 審閱。討論:https://postgr.es/m/CAEZATCWdNLgpKihmURF8nfofP0RFtAKJ7ktY6GcZOPnMfUoRqA@mail.gmail.com https://git.postgresql.org/pg/commitdiff/085f931f52494e1f304e35571924efa6fcdc2b44

  • 修正 numeric_power() 中邊緣情況的錯誤和精度損失。這修正了將數字提高到非常大的次方時出現的幾個相關問題。首先,當將一個負數提高到一個非常大的整數次方時,結果應該是明確定義的,但之前的程式碼只有在指數足夠小,可以通過 power_var_int() 時才能處理。否則,它會拋出一個內部錯誤,試圖對負數取對數。透過在 power_var() 的一般情況中添加適當的處理來解決這個問題,以處理負數底數,並在那裡檢查整數次方。接下來,當將一個絕對值略小於 1 的數字(正數或負數)提高到一個非常大的次方時,隨著次方的增加,結果應該接近於零。然而,在某些情況下,對於足夠大的次方,這將會失去所有精度,並返回 1 而不是 0。這是由於為最終全精度計算計算 local_rscale 的方式造成的:local_rscale = rscale + (int) val - ln_dweight + 8 右邊的前兩項旨在給出結果中所需的有效位數(“val”是估計的結果權重)。然而,這未能考慮到 rscale 被限制為 NUMERIC_MAX_DISPLAY_SCALE(1000)的最大值,並且結果權重可能小於 -1000,導致它們的總和小於零,從而導致精度損失。透過強制將計算出的有效位數設為非負數來修正這個問題。它可以是零(當結果權重小於 -1000 時),因為 local_rscale 值包含一些額外的位數,以確保精確的結果。最後,向 exp_var() 和 power_var() 添加額外的下溢檢查,以便它們對於結果與零無法區分的情況,始終如一地返回零。此程式碼的一些路徑已經在這種情況下返回零,但其他路徑拋出了溢位錯誤。Dean Rasheed,由 Yugo Nagata 審閱。討論:http://postgr.es/m/CAEZATCW6Dvq7+3wN3tt5jLj-FyOcUgT5xNoOqce5=6Su0bCR0w@mail.gmail.com https://git.postgresql.org/pg/commitdiff/4dd5ce2fd9b9b2134886fee7fe4cb36d1988adb2

Tomáš Vondra 推送了

Álvaro Herrera 推送了

Bruce Momjian 推送了

Andrew Dunstan 推送了

藤井正雄推送

John Naylor 推送

Daniel Gustafsson 推送

Amit Kapila 推送

Etsuro Fujita 推送

  • postgres_fdw:修正處理待處理的非同步請求。待處理的非同步請求由 process_pending_request() 處理,該函數先前不僅處理進行中的遠端查詢,還執行 ExecForeignScan() 以從遠端查詢的結果非同步地產生一個元組返回給本地伺服器。但這導致了伺服器崩潰(當執行查詢時),或者導致「InstrStartNode called twice in a row」或「InstrEndLoop called on running node」的錯誤(當對其執行 EXPLAIN ANALYZE 時)。這種情況發生在計劃樹包含多個支援非同步的節點,這些節點存取相同的 initplan/subplan,而該 initplan/subplan 又包含多個掃描相同外部資料表的支援非同步的節點(如同父級支援非同步的節點),正如 Andrey Lepikhov 所報告的。原因是,當為父級支援非同步的節點之一執行 initplan/subplan 時,process_pending_request() 中的第二步調用了另一個父級支援非同步的節點的 initplan/subplan 的遞迴執行。為了修正此問題,將 process_pending_request() 分割為兩個步驟,並將第二步延遲到為每個待處理的非同步請求調用 ForeignAsyncConfigureWait() 時。此外,在 ExecAppendAsyncEventWait() 中,我們假設 FDW 會在從該函數中的 ForeignAsyncConfigureWait() 調用它們時,在其中建立的 WaitEventSet 中註冊至少一個等待事件,但允許 FDW 在 WaitEventSet 中註冊零個等待事件;修改 ExecAppendAsyncEventWait() 在這種情況下直接返回。這是提交 27e1f1456 中的疏忽。回溯修補至 v14,該提交已納入。Andrey Lepikhov 和 Etsuro Fujita 討論:https://postgr.es/m/fe5eaa19-1704-e4a4-76ee-3b9d37ade399@postgrespro.ru https://git.postgresql.org/pg/commitdiff/1ec7fca8592178281cd5cdada0f27a340fb813fc

Heikki Linnakangas 推送

Robert Haas 推送

  • 移除不必要的 ReadCheckpointRecord() 呼叫。最後一個檢查點記錄應該始終是可讀的,否則,崩潰會使我們處於無法復原的情況。因此,此修補程式移除的測試應該始終成功。為了使其失敗,程式碼中的某個地方必須存在嚴重的錯誤,或者使用者必須在崩潰復原運行時手動修改 pg_wal。如果它是第一個,我們應該修復錯誤。如果它是第二個,他們應該停止,或者無論如何他們正在自擔風險地這樣做。在這兩種情況下,完整的檢查點而不是復原結束記錄似乎都不是一個明顯的勝利。此外,很少使用的程式碼路徑特別容易出現錯誤,因此讓我們通過擺脫這一個來簡化。討論:http://postgr.es/m/CA+TgmoYmw==TOJ6EzYb_vcjyS09NkzrVKSyBKUUyo1zBEaJASA@mail.gmail.com https://git.postgresql.org/pg/commitdiff/1d919de5eb3fffa7cc9479ed6d2915fb89794459

Jeff Davis 推送

待處理的修補程式

Bharath Rupireddy 發送了另一個修訂版的修補程式,以通過區分未記錄的表和臨時表的錯誤消息來改進發佈錯誤消息。

Daniel Gustafsson 發送了另一個修訂版的修補程式,以支持 NSS 作為 libpq TLS 後端。

David Fetter 和 Greg Nancarrow 交換了修補程式,以使用更少的指令來找到用於格式化的整數的小數位數。

John Naylor 發送了另一個兩個修訂版的修補程式,以添加驗證 UTF-8 文本的快速路徑。

Justin Pryzby 和 Bharath Rupireddy 交換了修補程式,以使其可以在啟動過程中記錄事件。

Haiying Tang 和 Vigneshwaran C 交換了修補程式,以將架構級別的粒度添加到 PUBLICATION。

Nathan Bossart 發送了另一個兩個修訂版的修補程式,以闡明 initdb --sync-only 幫助消息和文檔。

Amit Langote 發送了另一個修訂版的修補程式,以允許在跨分割區更新期間批次插入。

Andrey V. Lepikhov 發送了另一個修訂版的修補程式,以移除不需要的自我聯結。

David Rowley 發送了另一個修訂版的修補程式,將 ORDER BY 添加到某些遠端 SQL 查詢的 postgres_fdw。

Peter Smith 發送了另一個修訂版的修補程式,以添加邏輯複製的列篩選。

Daniel Westermann 發送了一個修補程式來修復錯字。

Amit Langote 發送了一個修補程式,在 src/backend/executor/nodeModifyTable.c:ExecInsert 中為計劃使用單獨的 tupledesc 結構。

Dagfinn Ilmari Mannsåker 發送了一個修補程式,通過禁止 void 上下文中的 map 和 grep 來符合 perlcritic。

Dipesh Pandit 發送了另一個修訂版的修補程式,以減輕 WAL 歸檔程式的效能降低目錄掃描問題。

Bertrand Drouvot 發送了另一個修訂版的修補程式,以使可以在備用伺服器上進行邏輯解碼。

Bharath Rupireddy 發送了另一個修訂版的修補程式,將 WaitLatch 用於 {pre, post}_auth_delay

Daniel Gustafsson 和 Jacob Champion 交換了修補程式,以重構 sslfiles Makefile 目標。

Bruce Momjian 發送了另一個四個修訂版的修補程式,以修復處理區間算術的一些問題。

Peter Smith 發送了另一個兩個修訂版的修補程式,以添加對流式傳輸交易的準備 API 支持。

Pavel Stěhule 發送了另一個修訂版的修補程式,以將 --options-file 選項和支持機制添加到 pg_dump。

Pavel Stěhule 發送了另一個修訂版的修補程式,以將篩選添加到 pg_dump。

Pavel Stěhule 發送了另一個修訂版的修補程式,以在 plpgsql 除錯 API 中傳回變數內容的文字值。

Michaël Paquier 發送了一個修補程式,以在 CREATE SEQUENCE 中記錄 RESTART,同時根據 START 描述其行為。

Daniel Gustafsson 發送了另一個修訂版的修補程式,以在後複製 errmsg 中發出命名空間。

Melanie Plageman 送出了一個補丁,用於 AIO bitmapheapscan 的 pgsr。

Yugo Nagata 送出 pgbench 補丁的另一個修訂版本,以防止它不必要地中止。

Amit Langote 送出另一個補丁修訂版本,以重新設計查詢關聯權限檢查,方法是將權限檢查資訊從範圍表條目移動到名為 RelPermissionInfo 的新節點類型,從而避免在範圍表中進行多次搜尋。

Ronan Dunklau 送出了一個補丁,添加了 READ_REPLICATION_SLOT 命令,該命令將在物理複製連線的上下文中使用,並在 pg_receivewal 中使用相同的方式來更好地估算所需的 start_lsn。

Daniil Zakhlystov 送出了一個補丁,添加 zlib 和 zstd 流壓縮,並在實作 libpq 壓縮時使用相同的方式。

Hayato Kuroda 送出了一個補丁,將本地 pid 添加到 fallback_application_name。

Masahiko Sawada 送出另兩個補丁修訂版本,將 errcontext 添加到應用邏輯複製變更時的錯誤中,添加 pg_stat_logical_replication_error 統計檢視,並向 ALTER SUBSCRIPTION 添加 skip_xid 選項。

Yura Sokolov 送出了一個補丁,將 integerset2 實作添加到 bdbench,旨在改善 lazy vacuum 的死亡元組儲存。

RGU 送出了一個補丁,用於收集子問題最頂層掃描/聯結關係的部分路徑。

Dean Rasheed 送出了一個補丁,以避免 to_char 中不正確的除以零錯誤。

Prabhat Sahu 送出了一個補丁,為 prohibit_wal 添加 TAP 測試。

John Naylor 送出另一個補丁修訂版本,以加速常見類型的元組排序。

Daniel Gustafsson 送出另一個補丁修訂版本,以修復 pg_basebackup 和 pg_dump 中的 sscanf 限制,並修復 TOC 檔案錯誤訊息列印中的錯誤,該錯誤表現為有時無法包含發生錯誤的檔案名稱。

Tomáš Vondra 送出另一個補丁修訂版本,以將序列上的操作添加到邏輯複製。

Melanie Plageman 送出另一個補丁修訂版本,以修復並行雜湊聯結批次清理中的競爭條件,闡明並行雜湊聯結階段的命名,並使在完整和右外部聯結上使用並行雜湊成為可能。

Hou Zhijie 送出了一個補丁,以刪除 maybe_send_schema 中未使用的參數。

David Rowley 和 Tomáš Vondra 交換了補丁,以使用生成上下文來加速元組排序。

Álvaro Herrera 送出另一個補丁修訂版本,以避免過早地建立歸檔狀態 ".ready" 檔案。

Heikki Linnakangas 送出另三個補丁修訂版本,以在 StartupXLOG() 中移動程式碼,將 xlog.c 分割成 xlog.c 和 xlogrecovery.c,並將應用一個 WAL 記錄的程式碼移動到子程序。

Ajin Cherian 送出了一個補丁,透過更改測試以使其等待兩個訂閱都趕上進度,然後再檢查準備好的事務計數,來修復 021_twophase tap 測試中可能發生的故障。

Gilles Darold 送出另一個補丁修訂版本,以添加函數 regexp_count、regexp_instr 和 regexp_like,並向 regexp_replace 和 regexp_substr 添加新參數,使其可以指定位置和出現次數。

Tomáš Vondra 送出另一個補丁修訂版本,以提高 slab allocator 的效能。

David Rowley 送出另一個補丁修訂版本,以在 RelOptInfo 中追蹤未修剪的分割區,並允許在更多情況下進行排序的分割區掃描。

Vigneshwaran C 送出另一個補丁修訂版本,以包含邏輯複製訊息格式文件中使用的實際資料類型。