安全性更新 13.2、12.6、11.11、10.16、9.6.21 和 9.5.25 已發布。 請盡快升級。 9.5.25 是 PostgreSQL 9.5 的最後一個版本。 https://postgres.tw/about/news/postgresql-132-126-1111-1016-9621-and-9525-released-2165/
本週人物:https://postgresql.life/post/hubert_lubaczewski/
check_pgbackrest 2.0,一個與 Nagios 相容的 pgBackRest 監視器,已發布。 https://github.com/dalibo/check_pgbackrest/releases
AGE 0.3.0,一個提供圖形資料庫功能的 PostgreSQL 擴充套件,已發布。 https://github.com/apache/incubator-age/releases/tag/v0.3.0.rc0-incubating
https://archives.postgresql.org/pgsql-jobs/2021-02/
Planet PostgreSQL: https://planet.postgresql.org/
PostgreSQL 每週新聞由 David Fetter 本週為您帶來
請在太平洋標準時間(PST8PDT)週日下午 3:00 之前將新聞和公告提交至 david@fetter.org。
Heikki Linnakangas 已推送
Tom Lane 已推送
修正對連接別名的欄位層級 SELECT 權限的錯誤處理。 scanNSItemForColumn、expandNSItemAttrs 和 ExpandSingleTable 在處理連接 ParseNamespaceItem 時,會將錯誤的 RTE 傳遞給 markVarForSelectPriv:它們會傳遞連接 RTE,而我們需要標記的是連接欄位來自的基本表格。 最終結果是未能正確填寫基本表格的 selectedCols 位元圖,導致對查詢讀取的欄位集的低估。 執行器仍然堅持至少有一個可選欄位; 但是通過正確製作的查詢,僅對表格的一個欄位具有 SELECT 權限的使用者仍然可以讀取其所有欄位。 為了修復,讓 markRTEForSelectPriv 為自己獲取正確的 RTE,忽略呼叫者傳遞的可能不匹配的 RTE。 稍後,我們將擺脫一些現在未使用的 RTE 參數,但這有 API 中斷的風險,因此我們不會在發布的分支中執行此操作。 此問題由 commit 9ce77d75c 引入,因此回溯到引入該問題的 v13。 感謝 Sven Klemm 報告此問題。 Security: CVE-2021-20229 https://git.postgresql.org/pg/commitdiff/c028faf2a62ce476c8d689a33b12471dc98b80f2
移除 markVarForSelectPriv() 中不再使用的 RTE 參數。 在 c028faf2a 之後,這不再需要。 我將其排除在該修補程式之外,因為 API 變更在發布的分支中是不希望的; 但是沒有理由不在 HEAD 中執行它。 https://git.postgresql.org/pg/commitdiff/d4c746516b8b4eb0bf993e3729ccc04d1febdb1e
通過使用 strtoint() 而不是 strtol() 來簡化 jsonfuncs.c 代碼。 明確測試 INT_MIN 和 INT_MAX 並不是特別好的風格; 這是乏味的,並且可能會在 int 和 long 寬度相同的機器上引發無用的編譯器警告。 我們發明 strtoint() 正是為了這種用法,因此請改用它。 在這裡,消除測試 did-strtoint-succeed 的方式中無意義的變化。 此外,避免嘗試否定 INT_MIN; 鑑於結果隱式轉換為 uint32,這可能會起作用,但我認為它在名義上是未定義的行為。 根據 Ranier Vilela 的抱怨,儘管這不是他提出的修補程式。 Discussion: https://postgr.es/m/CAEudQAqge3QfzoBRhe59QrB_5g+NmQUj2QpzqZ9Nc7QepXGAEw@mail.gmail.com https://git.postgresql.org/pg/commitdiff/69036aafb9a8f425fb489125b5075ba7719d20d0
移除 ECPGconnect() 中的無效程式碼,並改進文件。 ECPGconnect() 中打算允許指定 Unix socket 目錄路徑以代替埠的段落自大約二十年前提交以來從未執行過; 前面的 strrchr() 已經找到了最後一個冒號,因此不可能再有另一個。 缺乏關於它的投訴無疑與沒有面向使用者的文件建議它是可能的這一事實有關。 與其嘗試修復它,不如直接刪除無法訪問的程式碼,而是記錄寫入 socket 目錄路徑的方式,即將其指定為「host」選項。 為了支持這一點,再次通過澄清 ECPG 連接目標的語法文件,特別是記錄哪些內容被解析為識別碼以及在何處使用雙引號。 重新排列一些似乎排序不佳的內容,並修復幾個小的文件錯誤。 Kyotaro Horiguchi,根據 Shenhao Wang 的抱怨(文件變更主要由我完成) Discussion: https://postgr.es/m/ae52a416bbbf459c96bab30b3038e06c@G08CNEXMBPEKD06.g08.fujitsu.local https://git.postgresql.org/pg/commitdiff/62535cae9723afc48173ba1be65f1c7491813fc2
避免在 regex_selectivity() 中使用長固定前綴時發生除以零的錯誤。如果 regex 模式具有非常長的固定前綴(接近 500 個字元),pow(FIXED_CHAR_SEL, fixed_prefix_len) 的結果可能會下溢至零。通常,先前的選擇性計算也會下溢,導致我們計算 0/0 並得到 NaN。在已發布的分支中,這會導致稍後的斷言失敗。在 HEAD 中不會發生這種情況,原因我尚未探討,但這肯定仍然是一個錯誤。為了修復此問題,只需在 pow() 結果為零時跳過除法,這樣我們(很可能)會返回零選擇性估計值。在 "sel" 尚未下溢的邊緣情況下,這可能不是我們所希望的,但我不確定這種情況是否值得花費大量精力。無論如何,regex_selectivity_sub() 的結果幾乎不值得花費電子來寫入 :-( 根據 Alexander Lakhin 的報告。回溯修補到所有支援的版本。討論:https://postgr.es/m/6de0a0c3-ada9-cd0c-3e4e-2fa9964b41e3@gmail.com https://git.postgresql.org/pg/commitdiff/ae4867ec749671dadb5eb49a1158ded9b8ca0b29
調整編譯器版本截止值以支援 no_sanitize("alignment")。Buildfarm 結果顯示,直到 7.x 的 gcc 都會為此結構產生煩人的警告(並且,大概也不會做對的事情)。clang 似乎對我們目前的截止值沒有問題。討論:https://postgr.es/m/CAPpHfdsne3%3DT%3DfMNU45PtxdhSL_J2PjLTeS8rwKnJzUR4YNd4w%40mail.gmail.com 討論:https://postgr.es/m/475514.1612745257%40sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/ad2ad698ac16f36a9784bc98f312cf5b5266c6aa
Peter Geoghegan 推送
更正 pgstattuple B-Tree 頁面註解。https://git.postgresql.org/pg/commitdiff/5fd590021d268190e4c8f377370c7e7f1e7d9229
修復 nbtree README 中過時的 FSM 備註。自由空間映射已使用專用的關係分支,而不是共享記憶體段超過十年。https://git.postgresql.org/pg/commitdiff/31c7fb41e26bf03dae231c7165a1a16388b2e366
刪除過時的 IndexBulkDeleteResult stats 欄位。pages_removed 欄位不再用於任何用途。自 commit 0a469c87 移除舊式 VACUUM FULL 以來,索引已不可能在物理上縮小。https://git.postgresql.org/pg/commitdiff/3063eb17593c3ad498ce4e89db3358862ea2dbb6
Michaël Paquier 推送
為 VACUUM 新增選項 PROCESS_TOAST。此選項控制在執行手動 VACUUM 時是否 vacuum 與關係相關聯的 toast 資料表。已經可以觸發 toast 關係上的手動 VACUUM 而無需處理其主要關係,但是主要關係上的手動 vacuum 總是會強制對其 toast 資料表進行 vacuum。這在主要關係和 toast 關係的膨脹程度或事務年齡差異很大的情況下很有用。此選項是現有 VACOPT_SKIPTOAST 的擴展,autovacuum 使用該擴展來控制是否應跳過 toast 關係。為了與新選項保持一致,此內部標誌被重新命名為 VACOPT_PROCESS_TOAST。一個新的選項開關 --no-process-toast 被添加到 vacuumdb。作者:Nathan Bossart 審閱人:Kirk Jamison, Michael Paquier, Justin Pryzby 討論:https://postgr.es/m/BA8951E9-1524-48C5-94AF-73B1F0D7857F@amazon.com https://git.postgresql.org/pg/commitdiff/7cb3048f38e26b39dd5fd412ed8a4981b6809b35
在 REINDEX CONCURRENTLY 中保留 pg_attribute.attstattarget。對於索引,可以使用 ALTER INDEX SET STATISTICS 更新 attstattarget。在 REINDEX CONCURRENTLY 之後,此資料在新索引上遺失。當交換舊索引和新索引時會完成此欄位的更新,以使修復程式碼可以回溯修補。我們可以在長期內考慮的另一種方法是更改 index_create() 以在建立新關係時傳遞所需的 attstattarget 值,但是,由於這會導致 ABI 破壞,因此只能在 HEAD 上執行此操作。報告人:Ronan Dunklau 作者:Michael Paquier 審閱人:Ronan Dunklau, Tomas Vondra 討論:https://postgr.es/m/16628084.uLZWGnKmhe@laptop-ronand 回溯修補至:12 https://git.postgresql.org/pg/commitdiff/bd12080980297dbc8ae926a3bd5b2ef9cc47932b
簡化與 SSL 和 OpenSSL 編譯相關的程式碼。此提交使得與 OpenSSL 和 SSL 編譯相關的一些註解和程式碼更加通用,以簡化將來新增更多 SSL 實現。在 libpq 中,一些僅限 OpenSSL 的程式碼已移至 USE_OPENSSL 而非 USE_SSL 下。同時,使 libpq-fe.h 中的註解更加一致。作者:Daniel Gustafsson 討論:https://postgr.es/m/5382CB4A-9CF3-4145-BA46-C802615935E0@yesql.se https://git.postgresql.org/pg/commitdiff/092b785fad3de3f81355a4b2420aa39a1bc0ccd5
修復 REINDEX CONCURRENTLY 新迴歸測試中的 ORDER BY 子句。bd12080 中的疏忽。報告人:Justin Pryzby 討論:https://postgr.es/m/20210210065805.GG20012@telsasoft.com 回溯修補至:12 https://git.postgresql.org/pg/commitdiff/4f4726005082c07c004506a1ddfca29896375206
修復 checksum_helper.c 中 SHA256 摘要長度的複製貼上錯誤。問題由 87ae969 引入,在處理該區域時注意到。同時,修復周圍靜態斷言中的一些文法錯誤。https://git.postgresql.org/pg/commitdiff/42d74e0c443760af91875af99d2655c9eb4c40df
doc:提及 NO DEPENDS ON EXTENSION 在其支援的 ALTER 命令中。此文法風味已由 5fc7039 新增。作者:Ian Lawrence Barwick 討論:https://postgr.es/m/CAB8KJ=ii6JScodxkA6-DO8bjatsMYU3OcewnL0mdN9geR+tTaw@mail.gmail.com 回溯修補至:13 https://git.postgresql.org/pg/commitdiff/8063d0f6f56e53edd991f53aadc8cb7f8d3fdd8f
Fujii Masao 推送
在 pg_locks 中顯示程序開始等待鎖定的時間。此提交在 pg_locks 視窗中新增了新的欄位 "waitstart"。如果鎖定未被持有,此欄位會報告伺服器程序開始等待鎖定的時間。此資訊很有用,例如,可以透過從目前時間減去 pg_locks 中的 "waitstart" 來檢查等待鎖定的時間量,並識別程序等待時間過長的鎖定。此功能使用為死鎖逾時計時器取得的目前時間作為 "waitstart" (即,此程序開始等待鎖定的時間)。由於新取得目前時間可能會導致額外負荷,因此我們重複使用已取得的時間以避免該額外負荷。請注意,更新 "waitstart" 時不會持有鎖定表的分割鎖定,以避免額外鎖定獲取帶來的額外負荷。即使 "granted" 為 false,這可能會導致 pg_locks 中的 "waitstart" 在等待開始後的一段非常短的時間內變為 NULL。這在實務上是可以接受的,因為我們可以假設使用者在長時間等待鎖定的情況下,可能會查看 "waitstart"。提高目錄版本。作者:Atsushi Torikoshi 審閱者:Ian Lawrence Barwick, Robert Haas, Justin Pryzby, Fujii Masao 討論:https://postgr.es/m/a96013dc51cdc56b2a2b84fa8a16a993@oss.nttdata.com https://git.postgresql.org/pg/commitdiff/3b733fcd04195399db56f73f0616b4f5c6828e18
還原 "在 pg_locks 中顯示程序開始等待鎖定的時間。"。此動作還原了提交 3b733fcd04195399db56f73f0616b4f5c6828e18。根據 buildfarm 成員 prion 和 rorqual。https://git.postgresql.org/pg/commitdiff/890d2182a2c425aaa80f9bf9f7116d31e0c6538e
Amit Kapila 推送了
使 pg_replication_origin_drop 在併發刪除時安全。目前,我們從名稱取得 origin id,然後透過在 ReplicationOriginRelationId 上取得 ExclusiveLock 來刪除 origin。因此,兩個併發的 session 可以同時從名稱取得 id,然後當它們嘗試刪除 origin 時,其中一個 session 會收到 "tuple concurrently deleted" 或 "cache lookup failed for replication origin .."。為了防止這種競爭條件,我們在鎖定下執行整個操作。這消除了對 replorigin_drop() API 的需求,並且我們已經刪除了它,因此如果任何擴充功能作者正在使用它,他們需要改為使用 replorigin_drop_by_name。請參閱它在 pg_replication_origin_drop() 中的用法。作者:Peter Smith 審閱者:Amit Kapila, Euler Taveira, Petr Jelinek, and Alvaro Herrera 討論:https://postgres.tw/message-id/CAHut%2BPuW8DWV5fskkMWWMqzt-x7RPcNQOtJQBp6SdwyRghCk7A%40mail.gmail.com https://git.postgresql.org/pg/commitdiff/cd142e032ebd50ec7974b3633269477c2c72f1cc
允許在邏輯複製中的表同步期間進行多個 xact。對於邏輯複製中的初始表數據同步,我們使用單個事務來複製整個表,然後將流中的位置與主要應用程序工作器同步。 這種方法有多個缺點:(a) 如果在 tablesync 工作器和應用程序工作器之間同步 WAL 位置時出現任何錯誤(網絡崩潰、數據庫操作中的錯誤等),我們必須再次執行整個複製操作; 這對於大型副本尤其繁重,(b) 在同步階段(我們可以從多個事務接收 WAL)使用單個事務將有超過 CID 限制的風險,(c) 該槽將保留 WAL,直到整個同步完成,因為我們永遠不會提交到最後。 此修補程式通過允許在 tablesync 階段進行多個事務來解決上述所有缺點。 初始複製在單個事務中完成,之後,我們在收到每個事務時提交每個事務。 為了允許在任何錯誤或崩潰後進行恢復,我們使用永久槽和來源來追蹤進度。 一旦我們完成表的同步,槽和來源將被刪除。 如果用戶執行 DROP SUBSCRIPTION .. 或 ALTER SUBSCRIPTION .. REFERESH 並且某些表同步仍未完成,我們也會刪除 tablesync 工作器的槽和來源。 命令 ALTER SUBSCRIPTION ... REFRESH PUBLICATION 和 ALTER SUBSCRIPTION ... SET PUBLICATION ... 且 refresh 選項為 true 無法在事務塊內執行,因為它們現在可以刪除我們沒有回滾條款的槽。 這也將為訂閱者端邏輯複製 2PC 事務開闢道路。 以前,由於需要在 tablesync 工作器中維護單個事務,我們無法做到這一點。 由於目錄(pg_subscription_rel)中狀態的更改,因此提高了目錄版本。 作者:Peter Smith, Amit Kapila, and Takamichi Osumi 審閱者:Ajin Cherian, Petr Jelinek, Hou Zhijie and Amit Kapila 討論:https://postgr.es/m/CAA4eK1KHJxaZS-fod-0fey=0tq3=Gkn4ho=8N4-5HWiCfu0H1A@mail.gmail.com https://git.postgresql.org/pg/commitdiff/ce0fdbfe9722867b7fad4d3ede9b6a6bfc51fb4e
修復提交 ce0fdbfe97 新增的 Subscription 測試。 我們想測試事務塊中不允許的 Alter Subscription 變體,但為此,我們不需要建立嘗試連接到發布者的訂閱。 因此,此測試沒有問題,但最好允許此類測試以 wal_level = minimal 和 max_wal_senders = 0 運行,以便使它們與其他測試保持一致。 由 buildfarm 報告。 作者:Amit Kapila 審閱者:Ajin Cherian 討論:https://postgr.es/m/CAA4eK1Lw0V+e1JPGHDq=+hVACv=14H8sR+2eJ1k3PEgwKmU-jQ@mail.gmail.com https://git.postgresql.org/pg/commitdiff/c8b21b0378141948a2dc0ddde6f57407321787ea
Peter Eisentraut 推送了
修復缺少訊息複數形式的情況。https://git.postgresql.org/pg/commitdiff/4ad5611055c8381d6a9b54fc11838418a1f14bc9
pg_dump:新增 const 裝飾。將 const 裝飾新增到傾印函數的 *info 參數中,以說明它們不會修改該參數。 附近還有許多其他函數會修改它們的參數,因此這有助於澄清這些不同的 API。 討論:https://postgres.tw/message-id/flat/012d3030-9a2c-99a1-ed2d-988978b5632f%40enterprisedb.com https://git.postgresql.org/pg/commitdiff/64990081504661ff5c04dbf20cc4252be66ab149
為 abbrev(cidr) 新增測試案例。 這將特別為 inet_cidr_ntop.c 新增一些良好的測試覆蓋,該測試以前完全未覆蓋。 審閱者:Tom Lane tgl@sss.pgh.pa.us 討論:https://postgres.tw/message-id/flat/cb0c4662-4596-dab4-7f64-839c5e8582c8%40enterprisedb.com https://git.postgresql.org/pg/commitdiff/69273c8f88d7e6295ed7b38114969fa3ea03eff2
Magnus Hagander 推送了
Alexander Korotkov 推送了
Bruce Momjian 推送了
Tang Haiying 發送了另一個修訂的修補程式,以在使用 set/reset/show 時,支援 psql 中大寫輸入的 tab 補全。
Pavel Borisov 發送了三個修訂的修補程式,以使 amcheck 檢查 btree 索引的 UNIQUE 約束。
Vigneshwaran C 送出了另三個修訂版本的補丁,旨在讓 libpq 連線參數 "target_session_attrs" 支援新的值:read-only、primary、standby 和 prefer-standby。
Iwata Aya 送出了另兩個修訂版本的補丁,旨在為 libpq 新增追蹤功能。
Amit Langote、Greg Nancarrow 和 Hou Zhijie 交換了補丁,以實作 INSERT ... SELECT 的平行執行。
Scott Mead 送出了另一個修訂版本的補丁,旨在讓 autovacuum 動態降低 cost_limit 和 cost_delay。
Matthias van de Meent 和 Josef Šimánek 交換了補丁,以增強 COPY 進度報告。
Heikki Linnakangas 和 John Naylor 交換了補丁,以利用 SIMD 指令加速 utf-8 檢查。
Mark Rofail 和 Joel Jacobson 交換了補丁,以實作 foreign key 陣列。
Amit Langote 送出了另一個修訂版本的補丁,旨在設定 ForeignScanState.resultRelInfo 並延遲初始化 result relation 資訊。
Peter Eisentraut 送出了一個補丁,旨在新增 routine usage information schema table。
Heikki Linnakangas 送出了另一個修訂版本的補丁,旨在為編碼轉換函數新增 'noError' 參數,並使用它在較大的區塊中執行 COPY FROM 編碼轉換/驗證。
Alexey Bashtanov 送出了一個補丁,旨在新增 bit_xor 聚合函數。
Daniel Gustafsson 送出了另一個修訂版本的補丁,旨在讓 libpq 的 TLS 實作可以使用 NSS。
Jacob Champion 送出了另兩個修訂版本的補丁,旨在記錄來自所有身份驗證後端的已驗證身分。
Kyotaro HORIGUCHI 和 Dilip Kumar 交換了補丁,以提供一個新的介面來取得復原暫停狀態。
Tom Lane 送出了一個補丁,旨在禁止將一些容易出錯的字元用作自訂 GUC 的名稱。
Nathan Bossart 送出了一個補丁,旨在擴大 heap-only tuples (HOT) 優化的範圍,使其更能區分僅更新索引值實際發生變更的索引。 在此之前,HOT 只能在完全未索引的欄位上運作,因為另一種方法是更新所有索引,無論其中的任何內容是否實際發生了變更。
Peter Geoghegan 送出了三個修訂版本的補丁,旨在在已刪除的 nbtree 頁面中使用 64 位元 XID,並將 pages_newly_deleted 新增到 VACUUM VERBOSE 中。
Takayuki Tsunakawa 送出了另一個修訂版本的補丁,旨在加速目標表格具有遠端分割區時的 COPY FROM。
Justin Pryzby 送出了另一個修訂版本的補丁,旨在讓 CLUSTER 在分割表格上運作。
Stephen Frost 送出了另一個修訂版本的補丁,如果在 autovacuum 和 autoanalyze 的日誌中啟用了 track_io_timing,則包含 I/O 計時以及 autoanalyze 的讀取速率和髒頁速率。
Peter Smith 送出了另兩個修訂版本的補丁,旨在實作兩階段交易的邏輯解碼。
Andy Fan 送出了一個補丁,旨在於 RelOptInfo 中引入 notnullattrs 欄位,以指示目前查詢中哪些屬性不為 null。
Etsuro Fujita 送出了另兩個修訂版本的補丁,旨在 PostgreSQL FDW 節點上實作同步附加。
Ranier Vilela 和 Michaël Paquier 交換了補丁,透過向 pg_cryptohash_final 新增長度引數,來修復 pg_cryptohash_final 中可能發生的越界存取。
Dilip Kumar、Robert Haas 和 Justin Pryzby 交換了補丁,以新增表格的自訂壓縮方法。
Michail Nikolaev 送出了另一個修訂版本的補丁,旨在於備用伺服器上新增對索引 LP_DEAD hint 位元的完整支援。
Justin Pryzby 送出了一個補丁,以潤飾 14 版本的說明文件。
Peter Eisentraut 送出了另一個修訂版本的補丁,旨在為 SQL 函數實作 SQL 標準函數主體。
Peter Eisentraut 送出了一個補丁,旨在為 bytea LIKE 運算子新增測試。
Fujii Masao 送出了一個補丁,旨在修復一個錯誤,該錯誤表現為 ERROR: invalid spinlock number: 0,方法是將 written_lsn 的分配移動到一個可以更好地使用 pg_atomic_read_u64(&WalRcv->writtenUpto) 的位置。
Tomáš Vondra 送出了另一個修訂版本的補丁,旨在實作 BRIN 多範圍索引。
Anastasia Lubennikova 送出了另一個修訂版本的補丁,旨在修復一個錯誤,該錯誤表現為 pg_upgrade 在非標準 ACL 下失敗。
Melanie Plageman 送出了另一個修訂版本的補丁,以更新平行雜湊聯結的註解和階段命名。
Noah Misch 送出了另兩個修訂版本的補丁,旨在轉儲公用綱要所有權和安全標籤,並轉儲 COMMENT ON SCHEMA public。
Zhihong Yu 和 Ranier Vilela 交換了補丁,以修復 src/backend/replication/logical/reorderbuffer.c 中可能發生的取消引用 null 傳回值。
Tom Lane 送出了兩個修訂版本的補丁,旨在為 regexes 建立 rainbow arcs,並在比對類似 "."
或 ".*"
或其變體的子 NFA 時,對逐字元掃描進行捷徑處理,即它將比對任意數量的字元序列。
Thomas Munro 送出了一個補丁,試圖在 WAL 記錄之間保留緩衝區,如果成功,則可以在多次執行中分攤查詢、釘選、鎖定、解鎖和取消釘選所述緩衝區的成本。
Erik Rijkers 和 Amit Kapila 交換了補丁,以修復邏輯複寫的近期故障。
Bharath Rupireddy 送出了一個補丁,以移除 MakeTupleTableSlot 在 MakeSingleTupleTableSlot 中不必要的包裝。
Li Japin 送出了另一個修訂版本的補丁,旨在實作 ALTER SUBSCRIPTION ... ADD/DROP PUBLICATION。
Noah Misch 送出了一個補丁,以新增公用綱要預設 ACL。