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/
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
http://archives.postgresql.org/pgsql-jobs/2020-12/
Planet PostgreSQL: http://planet.postgresql.org/
本週的 PostgreSQL 每週新聞由 David Fetter 帶給您
請在太平洋標準時間下午 3:00 前的星期日將新聞和公告提交至 david@fetter.org。
Michaël Paquier 推送
將一些檢查點/重新啟動點狀態添加到 ps 顯示中。 這是針對恢復結束和關機檢查點/重新啟動點(不存在恢復結束重新啟動點),而不是所有類型的檢查點,在某些情況下,可能無法依靠 pg_stat_activity 從啟動或檢查點程序取得狀態。 例如,在崩潰恢復結束時,知道檢查點是否正在啟動程序中運行很有用,而之前 ps 顯示可能只顯示一些關於「恢復」某些內容的信息,這在檢查點運行時可能會造成混淆。 作者:Justin Pryzby 審閱人:Nathan Bossart、Kirk Jamison、Fujii Masao、Michael Paquier 討論:https://postgr.es/m/20200818225238.GP17022@telsasoft.com https://git.postgresql.org/pg/commitdiff/df9274adf3096feafbbde2562311c8ab80405267
改進 cryptohash 函數周圍的一些代碼。 這調整了一些與最近 cryptohash 函數更改相關的代碼:- 在 md5.h 中添加一個變數來追蹤計算結果的大小,從 pgcrypto 移過來。 請注意,pg_md5_hash() 已經假定了這個大小的結果。 - 釋放後備實作的上下文時,在雜湊數據上呼叫 explicit_bzero()。 特別是對於 MD5,留下一些非零數據是很令人討厭的。
清除一些與 uuid-ossp 最近更改相關的代碼。 .gitignore 仍然包含 md5.c,並且註釋不正確。 討論:https://postgr.es/m/X9HXKTgrvJvYO7Oh@paquier.xyz https://git.postgresql.org/pg/commitdiff/9b584953e7bf91e342af87ef44606acd6206cd1c
doc:修復與 pg_shmem_allocations 相關的說明。 僅對於匿名分配,偏移量顯示為 NULL。 作者:Benoit Lobréau 審閱人:Kyotaro Horiguchi 討論:https://postgr.es/m/CAPE8EZ5Lnoyqoz7aZpvQM0E8sW+hw+k6G2NULe+m4arFRrA1aA@mail.gmail.com Backpatch-through:13 https://git.postgresql.org/pg/commitdiff/bce641a2af7199f07ec2b0a84f8fec0f26b2adc0
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 推送了
SELECT '' AS two, i.* FROM INT2_TBL
的風格撰寫,其中第一欄表示預期的結果列數。隨著測試資料夾的擴充,這種風格越來越過時,因此很多這類風格都是錯誤且具誤導性的。此外,這種風格並非真正必要,因為 psql 輸出已經顯示結果列數。為了清理它,移除所有額外的欄位。 討論:https://postgres.tw/message-id/flat/1a25312b-2686-380d-3c67-7a69094a999f%40enterprisedb.com https://git.postgresql.org/pg/commitdiff/c06d6aa4c35177655e0fd4acaca888a73c3f9845Tomáš 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 推送了
多重範圍資料類型。多重範圍基本上是有序的非重疊範圍陣列,並在其上定義了集合理論運算。自 v14 起,每種範圍類型都會自動獲得對應的多重範圍資料類型。命名多重範圍類型有手動和自動兩種機制。可以使用 CREATE TYPE 中的 multirange_type_name 屬性來指定多重範圍類型名稱。否則,會自動產生多重範圍類型名稱。如果範圍類型名稱包含 "range",則我們將其變更為 "multirange"。否則,我們在末尾新增 "_multirange"。多重範圍的實作帶有一種空間效率高的內部表示格式,可避免額外的填補和 OID 的重複儲存。總而言之,此格式允許以 O(n) 透過索引提取特定範圍。多重範圍已實作統計資料收集和選擇性估計。為此,儲存的多重範圍近似為沒有間隙的聯集範圍。此欄位將來可能需要改進。Catversion 已增加。 討論:https://postgr.es/m/CALNJ-vSUpQ_Y%3DjXvTxt1VYFztaBSsWVXeF1y6gTYQ4bOiWDLgQ%40mail.gmail.com 討論:https://postgr.es/m/a0b8026459d1e6167933be2104a6174e7d40d0ab.camel%40j-davis.com#fe7218c83b08068bfffb0c5293eceda0 作者:Paul Jungwirth,由我修改 審閱人:David Fetter、Corey Huinker、Jeff Davis、Pavel Stehule 審閱人:Alvaro Herrera、Tom Lane、Isaac Morland、David G. Johnston 審閱人:Zhihong Yu、Alexander Korotkov https://git.postgresql.org/pg/commitdiff/6df7a9698bb036610c1e8c6d375e1be38cb26d5f
pg_dump.c 關於多重範圍的修復。此提交修復了兩個錯誤的版本號碼檢查和一個錯誤的空值檢查。https://git.postgresql.org/pg/commitdiff/8344d72cccae699e13884a5705b91dc1c4747c03
修復 6df7a9698b 中引入的編譯器警告。https://git.postgresql.org/pg/commitdiff/11072e86939d2f5ca0a97c709b46f29ea8b57590
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 多範圍索引。