PostgreSQL 每週新聞 - 2020 年 12 月 20 日

發表於 2020-12-20,作者 PWN
PWN

PostgreSQL 每週新聞 - 2020 年 12 月 20 日

FOSDEM PGDay 2021 將於 2021 年 2 月 6-7 日在線上舉行。https://fosdem.org/2021/

行為準則委員會歡迎新成員 Michael Goldberg https://postgres.tw/about/policies/coc_committee/

本週人物:https://postgresql.life/post/keith_fiske/

PostgreSQL 產品新聞

PoWA 4.1,PostgreSQL 的效能工具,已發布。https://github.com/powa-team/powa-archivist/releases/tag/REL_4_1_0

Database .NET v31.5,一個多資料庫管理工具,現在支援 PostgreSQL,已發布。https://fishcodelib.com/Database.htm

pgAdmin4 4.29,PostgreSQL 的 Web 和原生 GUI 控制中心,已發布。https://www.pgadmin.org/docs/pgadmin4/dev/release_notes_4_29.html

十二月的 PostgreSQL 工作

http://archives.postgresql.org/pgsql-jobs/2020-12/

PostgreSQL 新聞

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

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

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

已套用修補程式

Michaël Paquier 推送

Jeff Davis 推送

Tom Lane 推送

  • 改善 hash_create() 的 API,以提高穩健性。 發明一個新的標誌位 HASH_STRINGS 來指定 C 字符串雜湊,以前這是預設值; 並添加斷言,堅持必須設置 HASH_STRINGS、HASH_BLOBS 和 HASH_FUNCTION 位中的恰好一個。 這是希望防止重蹈 commit a1b8aa1e4 中修復的那種疏忽(即錯誤地省略 HASH_BLOBS)。 此外,當指定 HASH_STRINGS 時,堅持 keysize 大於 8 個字節。 這是一種啟發式方法,但它應該能捕捉到意外將 HASH_STRINGS 用於整數或指針鍵的情況。 (幾乎所有現有的用例都將 keysize 設置為 NAMEDATALEN 或更大,因此幾乎沒有理由認為此限制會有問題。) 調整 hash_create(),堅持必須設置 HASH_ELEM 標誌,並刪除其對 keysize 和 entrysize 的預設值。 由於這些預設值沒有文檔記錄且基本上沒有用,因此無論如何也沒有呼叫者省略 HASH_ELEM。 此外,從那些擁有 HASHCTL 參數結構的呼叫者中刪除 memset 的零填充。 這從來都不是真正必要的,雖然這不是一個糟糕的編碼約定,但令人困惑的是,有些呼叫者這樣做了,而有些則沒有。 我們不妨透過標準化為「不」來節省一些週期。 還改善了 hash_create() 的文檔。 順便說一句,通過將鍵儲存為二進制 Oid 而不是字符串來改善 reinit.c 對雜湊表的使用; 並且,由於這是一個臨時雜湊表,因此將其分配在 CurrentMemoryContext 中以使其整潔。 討論:https://postgr.es/m/590625.1607878171@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/b3817f5f774663d55931dd4fab9c5a94a15ae7ab

  • 修復 varchar_2.out 以在 cs_CZ 語言環境中匹配實際情況。 似乎是 c06d6aa4c 中的複製粘貼錯誤。 根據 buildfarm。 https://git.postgresql.org/pg/commitdiff/88e014c149cc396fb218b08eda17c47d5b33e94f

  • 避免在 relmapper 初始化期間使用相同的來源和目的地進行 memcpy()。 對 C 標準的狹義理解認為 memcpy(x,x,n) 是未定義的,儘管很難想像一個真正會表現錯誤的實現。 但是,valgrind 等分析工具可能會抱怨這一點; 因此,讓我們修補 relmapper.c 以避免這樣做。 另見 5b630501e、d3f4e8a8a、ad7b48ea0 和其他類似的修復。 顯然,沒有人嘗試對 initdb 進行 valgrind 檢測? 這已經存在了很長時間,我很驚訝以前沒有人報告過。 Back-patch,以防萬一有人想在抱怨此問題的平台上使用 back branch; 我們也 back-patched 了那些較早的修復。 討論:https://postgr.es/m/161790.1608310142@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/53d4f5fef04653fc495ae385a9c2f78c77e5c7d9

  • 添加幾個遺漏的 .gitignore 條目。 任何忽略 /output_iso/ 的子目錄也應該忽略 /tmp_check_iso/,這可能是由失敗的 pg_isolation_regress_check 運行留下的。 我認為這些一直都是錯誤的,但在 back branch 中修復它似乎並不重要。 https://git.postgresql.org/pg/commitdiff/8afca702ecbf0730b6175afda0cecbbf0a1967e7

  • 移除 src/test/Makefile 中現在無用的 ALWAYS_SUBDIRS 條目。 Commit 257836a75 將「locale」子目錄添加到 SUBDIRS,但忽略了將其從 ALWAYS_SUBDIRS 中刪除。 這種疏忽沒有功能影響,因為 filter-out 函數無論如何都會將其刪除。 儘管如此,在兩個地方列出一個子目錄對讀者來說會產生混淆,特別是因為這會使相關的註釋變成一個部分謊言。 https://git.postgresql.org/pg/commitdiff/08b01d4dd982b491a2f9641804b368185b8f4c53

  • 避免在 pgstat_recv_replslot 中使用相同的來源和目的地進行 memcpy()。 與 commit 53d4f5fef 和早期修復中相同類型的問題; 也可以通過明顯比 buildfarm valgrind 測試更挑剔的 valgrind 測試找到。 這一個是 commit 986816750 中的一個疏忽。 由於這在 HEAD 中是新的,因此不需要 back-patch。 https://git.postgresql.org/pg/commitdiff/ed6329cfa975a13c58c44676464585cda5d317b3

  • 文件:改善 pgbench 指令碼權重的描述。指出如果想要撰寫包含 "@" 符號的指令碼檔名時,該如何變通處理。稍微整理文字。 Fabien Coelho,並由我進行額外的文字潤飾。 討論:https://postgr.es/m/1c4e81550d214741827a03292222db8d@G08CNEXMBPEKD06.g08.fujitsu.local https://git.postgresql.org/pg/commitdiff/1990ce186ee64f24dcff885a87cea04e3dfd8166

Peter Eisentraut 推送了

Tomáš Vondra 推送了

Álvaro Herrera 推送了

Peter Geoghegan 推送了

Bruce Momjian 推送了

Fujii Masao 推送了

  • 還原「移除用於向啟動程序發送信號的專用閂鎖」。還原 ac22929a26 以及後續修復 113d3591b8。因為它破壞了啟動程序等待緩衝區釘選上的復原衝突應該僅由緩衝區取消釘選或 ResolveRecoveryConflictWithBufferPin() 中啟用的逾時喚醒的假設。例如,這導致 SIGHUP 信號處理常式或 walreceiver 程序不必要地頻繁喚醒該啟動程序。此外,新增有關為什麼不應移除已還原修補程式試圖擺脫的專用閂鎖的註解。感謝 Kyotaro Horiguchi 的討論。 作者:Fujii Masao 討論:https://postgr.es/m/d8c0c608-021b-3c73-fffd-3240829ee986@oss.nttdata.com https://git.postgresql.org/pg/commitdiff/00f690a239932e477f25120d19b08aacdc30deb7

  • pg_stat_statements:追蹤上次重設所有統計資料的時間。此提交將 "stats_reset" 欄位新增到 pg_stat_statements_info 檢視表中。此欄位表示上次重設 pg_stat_statements 檢視表中所有統計資料的時間。經過討論,此提交還變更了 pg_stat_statements_info 程式碼,以便 "dealloc" 欄位與 "stats_reset" 重設的同時重設,也就是說,每當移除所有 pg_stat_statements 項目時,為了保持一致性。先前,"dealloc" 僅在呼叫 pg_stat_statements_reset(0, 0, 0) 時重設,而在 pg_stat_statements_reset() 使用非零值引數捨棄所有項目時不會重設。這令人困惑。 作者:Naoki Nakamichi、Yuki Seino 審閱人:Yuki Seino、Kyotaro Horiguchi、Li Japin、Fujii Masao 討論:https://postgr.es/m/c102cf3180d0ee73c1c5a0f7f8558322@oss.nttdata.com https://git.postgresql.org/pg/commitdiff/2e0fedf0362cc964c4dae42258455b6391051e70

Amit Kapila 推送了

Alexander Korotkov 推送了

待處理的修補程式

Michaël Paquier 送交了另一個修訂版的修補程式,以引入 SHA1 cryptohash 基礎結構。

Andrey Borodin 送交了另一個修訂版的修補程式,以在 GetMultiXactIdMembers 中對偏移量和成員使用共用鎖定,使 MultiXact 本機快取大小可配置,在邊緣情況下新增條件變數以等待下一個 MultXact 偏移量,並新增 GUC 以調整 MultiXact SLRUs。

Kyotaro HORIGUCHI 送交了一個修補程式,以確保僅在適當的情況下取消 invalid-page-header 錯誤訊息,也就是僅在非備用節點上。

Andrey V. Lepikhov 送交了另一個修訂版的修補程式,以將多重插入決策邏輯移至執行器中,並將其與 FDW API 的三個新方法一起使用:BeginForeignCopy、ExecForeignCopy 和 EndForeignCopy,以加速 COPY FROM 在具有遠端分割區的表格上的應用。

藤井雅生 (Fujii Masao) 送出了另兩次修訂的補丁,以新增一個 log_recovery_conflict_waits GUC,其功能如其名稱所示。

Tom Lane 送出了另兩次修訂的補丁,以修正 PL/pgsql 進行賦值的方式。

Bharath Rupireddy 和 Hou Zhijie 交換了補丁,以使 CTAS 中可以使用平行 INSERT。

Nathan Bossart 和 Kyotaro HORIGUCHI 交換了補丁,旨在修正一個錯誤,該錯誤表現為歸檔狀態 ".ready" 檔案可能過早建立。

Kirk Jamison 送出了另一次修訂的補丁,以使用 dlist 使刪除關係緩衝區更有效率。

Amit Kapila 送出了另外三次修訂的補丁,以實作兩階段交易的邏輯解碼。

Yuzuko Hosoya 送出了另一次修訂的補丁,以使 autoanalyze 在分割表格上更好地工作。

Atsushi Torikoshi 送出了一個補丁,以將 wait_start 欄位新增到 pg_locks 視圖。

Iwata Aya 送出了另一次修訂的補丁,以將追蹤功能新增到 libpq。

Laurenz Albe 送出了另兩次修訂的補丁,以將會話統計資訊新增到 pg_stat_database。

Peter Eisentraut 送出了另一次修訂的補丁,以將 EXTRACT 的傳回類型變更為 numeric。

Fabrízio de Royes Mello 送出了另一次修訂的補丁,以在備用伺服器上實作最小邏輯解碼。

Justin Pryzby 送出了另兩次修訂的補丁,以允許 CLUSTER、VACUUM FULL 和 REINDEX 即時變更表格空間。

Jeff Davis 送出了一個補丁,以強制執行 ASCII 還原點名稱。

Bharath Rupireddy 送出了一個補丁,旨在修正一個錯誤,該錯誤表現為 - 如果相關的使用者對應被刪除,則 postgres_fdw 會發生快取連線洩漏,方法是將關閉所有無效連線的位置移動到 pgfdw_xact_callback()。

Peter Smith 送出了另兩次修訂的補丁,以使可以在 tablesync 上使用多個 worker。

Bruce Momjian 和 Neil Chen 交換了補丁,以實作金鑰管理。

Tomáš Vondra 送出了另一次修訂的補丁,以在 generate_useful_gather_paths 中考慮未排序的路徑,檢查 generate_useful_gather_paths 中的平行安全性,不允許在 Gather Merge 下方的排序中使用 SRF,避免在 find_em_expr_usable_for_sorting_rel 中搜尋 volatile expr,並透過闡明 find_em_expr_usable_for_sorting_rel 和 prepare_sort_from_pathkeys 之間的關係來改善 find_em_expr_usable_for_sorting_rel 註解,即這兩個位置之間需要共用哪些限制。

Laurenz Albe 送出了另一次修訂的補丁,以修正 psql 的 \e 系列函數中一個大的 POLA 違規,即如果在進行任何變更之前退出編輯器,則將執行先前的查詢。 修正方法是清除查詢緩衝區。

Heikki Linnakangas 送出了另一次修訂的補丁,透過使用單一陣列和雜湊而不是每個物件種類一個,使 resowners 更容易擴充。

Justin Pryzby 送出了另一次修訂的補丁到 pg_upgrade/test.sh,該補丁進行了一些變更,允許從 v11 測試升級。

Heikki Linnakangas 送出了一個補丁,以在更大的區塊中進行 COPY FROM 編碼轉換/驗證。

藤井雅生 (Fujii Masao) 送出了三次修訂的補丁,旨在修正一個錯誤,該錯誤表現為透過新增對該情況的檢查,無法偵測後端和復原之間的死鎖。

Michaël Paquier 送出了兩次修訂的補丁,以重構 HMAC 實作。

Konstantin Knizhnik 送出了另兩次修訂的補丁,以新增一種在登入時觸發觸發器的方法。

David Fetter 送出了一個補丁,以實作 \gsetenv,類似於 \gset,僅適用於 psql 中的環境變數。

Önder Kalacı 送出了另一次修訂的補丁,以實作邏輯複寫的列篩選。

Denis Smirnov 和 Konstantin Knizhnik 交換了補丁,以實作 libpq 的壓縮。

Peter Eisentraut 送出了一個補丁,以將 make_*() 函數的 seconds 引數變更為 numeric。

藤井雅生 (Fujii Masao) 送出了一個補丁,旨在修正一個錯誤,該錯誤表現為 STANDBY_LOCK_TIMEOUT 可能不會中斷 ProcWaitForSignal(),方法是確保 StandbyLockTimeoutHandler() 設定一個閂鎖。

Bharath Rupireddy 送出了另一次修訂的補丁,如果關係已存在,則在 CTAS/CMV 中快速失敗。

Gilles Darold 送出了另一次修訂的補丁,以修正 DDL 中的競爭條件,在 DDL 中,函數的命名空間可能會在將函數保留在原處時消失。

Michaël Paquier 送出了一個補丁,以刪除重複的 ASCII-ness 檢查,並使剩餘的檢查更有效率。

Justin Pryzby 送出了另兩次修訂的補丁,以允許 psql 的 \dti+ 查看 pg_toast.*

David CARLIER 送出了一個補丁,以在 ARM 上實作 SPIN_LOCK。

Michaël Paquier 和 Heikki Linnakangas 交換了補丁,旨在修正一個錯誤,該錯誤表現為使用 OpenSSL 的 cryptohash 函數的不正確的分配處理。

Tom Lane 和 Alexander Lakhin 交換了補丁,以顯示使用 Valgrind 進行 TAP 測試的範例。

Craig Ringer 送出了一個補丁,透過修正一個錯誤的追蹤點來識別追蹤點中的 LWLocks,其中一個 lwlock__acquire 事件會從 LWLockWaitForVar 觸發,儘管該函數實際上從未取得鎖定,為每個追蹤命中新增 tranche id 和鎖定指標,為所有鎖定取得和釋放新增單一路徑追蹤點,並新增一些關於 LWLock tranches 的註解,以澄清未來讀者的事項。

Konstantin Knizhnik 送出了一個補丁,以重新實作 BufferAlloc,在此過程中刪除了雙重鎖定。

Pavel Stěhule 送出了另一次修訂的補丁,以實作架構變數。

Tom Lane 送出了一個補丁,以修正 jsonb_concat() 中的邊緣案例錯誤。

Thomas Munro 送出了兩次修訂的補丁,以新增 pg_preadv() 和 pg_pwritev(),它們提供同步分散/聚集 I/O 例程,然後使用相同的例程來使用向量 I/O 將 WAL 片段歸零。

Tomáš Vondra 送出了另一次修訂的補丁,以實作 BRIN 多範圍索引。