安全性版本 13.4、12.8、11.13、10.18、9.6.23 和 14 Beta 3 已發布 請儘快升級。 9.6 系列將於 2021 年 11 月 11 日停止接收修復。現在規劃主要版本升級。
行為準則委員會正在尋找新成員,任期為 1-3 年。
pgbouncer 1.16.0,一個用於 PostgreSQL 的連線池和其他功能 已發布
https://archives.postgresql.org/pgsql-jobs/2021-08/
Planet PostgreSQL: https://planet.postgresql.org/
PostgreSQL 每週新聞由 David Fetter 本週為您帶來
請在太平洋標準時間 (PST8PDT) 星期日下午 3:00 前將新聞和公告發送至 david@fetter.org。
Bruce Momjian 推送
David Rowley 推送
為 MSVC x86_64 建置新增 POPCNT 支援。 02a6a54ec 新增了程式碼,以便在許多常見平台上使用 POPCNT 指令(如果可用)。在這裡,我們對 MSVC for x86_64 機器執行相同的操作。 MSVC 的 popcnt 內部函數似乎與 GCC 的不同,它們總是發出 popcnt 指令。在 GCC 中,此行為取決於原始程式檔是否使用 -mpopcnt 編譯。因此,MSVC 內部函數已歸入 pg_popcount*_asm
函數中,但是這樣做會使該函數的名稱無效,因此讓我們將其重新命名為 pg_popcount*_fast()
。 作者:David Rowley 審閱者:John Naylor 討論:https://postgr.es/m/CAApHDvqL3cbbK%3DGzNcwzsNR9Gi%2BaUvTudKkC4XgnQfXirJ_oRQ%40mail.gmail.com https://git.postgresql.org/pg/commitdiff/2e281249af6c702fd057f34150fd9ac6cb8c7a8b
在 EXPLAIN 中針對 queryid 使用 ExplainPropertyInteger。這可以節省幾行程式碼。此外,新增一條註解以提及為什麼我們使用 ExplainPropertyInteger 而不是 ExplainPropertyUInteger,因為 queryid 是一個 uint64 類型。作者:David Rowley 審閱者:Julien Rouhaud 討論:https://postgr.es/m/CAApHDvqhSLYpSU_EqUdN39w9Uvb8ogmHV7_3YhJ0S3aScGBjsg@mail.gmail.com 向後移植:14,此程式碼最初是在此處新增的 https://git.postgresql.org/pg/commitdiff/4a3d806f38f99fecf8f2a2bf7990a7ebea9b6c63
Doc:修正有關 VACUUM 記憶體限制的誤導性陳述。在 ec34040af 中,我提到將 maintenance_work_limit 設定為高於 1GB 對於 vacuum 沒有任何意義,但這是錯誤的,因為 ginInsertCleanup() 也會查看在 VACUUM 期間 maintenance_work_mem 設定為何,並且這不受限於 1GB。在這裡,我嘗試更清楚地表明該限制僅圍繞我們可以在 VACUUM 期間收集的無效元組識別碼數量。我還在 autovacuum_work_mem 中新增了一條註解來提及此限制。我沒有在 ec34040af 中這樣做,因為我對將該 GUC 的最大值限制為 1GB 有一些錯誤的想法。作者:David Rowley 討論:https://postgr.es/m/CAApHDvpGwOAvunp-E-bN_rbAs3hmxMoasm5pzkYDbf36h73s7w@mail.gmail.com 向後移植:9.6,與 ec34040af 相同 https://git.postgresql.org/pg/commitdiff/deb6ffd4fdeb589de7a13ac1791380a7138cf59f
從 MSVC 建置腳本中移除一些特殊情況。在這裡,我們新增了對 Makefiles 的額外解析,以確定何時新增對 libpgport 和 libpgcommon 的引用。我們還通過新增非常基本的邏輯來實現 Makefile 規則,從而消除了新增當前 contrib_extrasource 的需求,這些規則在 Makefile 中針對給定的 .o 檔案存在時新增 .l 和 .y 檔案。這只是一些對 Makefiles 的非常基本的額外解析,旨在盡量保持使用 make 建置和 MSVC 建置之間的一致性。這恰好適用於我們目前 Makefiles 的佈局方式,但如果有人選擇在 Makefile 中執行我們不支援解析的操作,則將來很容易被破壞。當我們遇到它時,我們將跨過那座橋。作者:David Rowley 討論:https://postgr.es/m/CAApHDvoPULi5JW3933NxgwxOmu9Ncvpcyt87UhEHAUX16QqmpA@mail.gmail.com https://git.postgresql.org/pg/commitdiff/76ad24400d73fa10d527844d50bedf7dacb1e87b
修正 simplehash.h 中不正確的雜湊表調整大小程式碼。此修正解決了 simplehash.h 中的一個錯誤,該錯誤導致雜湊表增長到 SH_MAX_SIZE (2^32) 時,使用了不正確的大小遮罩。當雜湊表達到最大可能的 bucket 數量時,程式碼錯誤地將大小遮罩設定為 0。這將導致始終嘗試使用第 0 個 bucket,從而導致由於衝突太多而嘗試不斷增長雜湊表的無限迴圈。 顯然,simplehash 表增長到這麼大並不常見,因為這個錯誤可以追溯到 v10,而且似乎沒有人注意到它。但是,人們最有可能注意到它的地方可能是執行一個大型的記憶體內雜湊聚合,其中包含至少接近 2^31 個群組。在此修復之後,程式碼現在可以正確處理高達 2^32 群組的 98% 並且在嘗試將更多項目插入雜湊表時將出現以下錯誤而失敗:ERROR: hash table size exceeded (錯誤:雜湊表大小超出) 但是,work_mem(或較新版本中的 hash_mem_multiplier)設定通常會導致雜湊聚合在達到那麼多群組之前就溢位到磁碟。我做的最小測試案例使用了超過 192GB 的 work_mem 設定才能觸發這個錯誤。 simplehash 雜湊表也用於一些其他地方,例如位圖索引掃描,但是,雜湊表在那裡可以達到的大小也受到 work_mem 的限制,並且需要大約 16TB (2^31) 頁的關係和非常大的 work_mem 設定才能觸發它。使用較小的 work_mem 值,該表會變得有損,並且永遠不會增長到足以觸發問題。 作者:Yura Sokolov 審閱者:David Rowley, Ranier Vilela 討論:https://postgr.es/m/b1f7f32737c3438136f64b26f4852b96@postgrespro.ru 向後移植到:10,其中新增了 simplehash.h https://git.postgresql.org/pg/commitdiff/37450f2ca9ad430d78673cc26816fc2085e65904
Amit Kapila 推送
Tom Lane 推送
盡可能避免確定正則表達式子表達式匹配。 鑒於我們的正則表達式引擎的工作方式,識別帶括號的子表達式的精確匹配位置是一項相當昂貴的任務,無論是在正則表達式編譯時(我們必須為每個帶括號的子表達式創建一個優化的 NFA),還是在運行時(其中確定確切的匹配位置需要費力的搜索)。 到目前為止,我們幾乎沒有嘗試優化這種情況。 此修補程式識別了我們在編譯時知道我們不需要知道子表達式匹配位置的情況,並教導正則表達式編譯器不要為正則表達式中其他地方的反向引用未引用的括號對創建每個子表達式的正則表達式。 (為了保留語義,我們顯然仍然必須確定反向引用參考的匹配位置。) 使用者之前可以通過小心地盡可能編寫「非捕獲」括號來獲得相同的結果,但很少有人會費心這樣做。 討論:https://postgr.es/m/2219936.1628115334@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/0e6aa8747d439bb7f08f95e358f0509c50396785
讓 regexp_replace() 在可行時使用 REG_NOSUB。 如果替換字串不包含 \1...\9,那麼我們不需要子匹配位置,所以我們也可以在這裡使用 REG_NOSUB 優化。 已經有一個對替換字串的預掃描來尋找反斜線,所以擴展它來檢查數字,並重構以允許在我們編譯正則表達式之前發生這種情況。 同時,嘗試通過使用 memchr() 而不是手寫迴圈來加速預掃描。 與正則表達式處理相比,這很可能在噪聲中消失,但也許不會。 無論如何,這個程式碼更短。 此外,新增一些測試案例以改善 appendStringInfoRegexpSubstr() 的較差覆蓋率。 討論:https://postgr.es/m/3534632.1628536485@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/18bac60ede44359a1e577df80aef196e371c902e
修復帶有 "char" 類型和 <!--<=
運算符的 btree_gin 索引掃描失敗的問題。 由於對 "char" 類型是有符號還是無符號的混淆,對 "col < 'x'" 或 "col <= 'x'" 之類的索引搜索的掃描將從索引的中間而不是左端開始,因此遺漏了許多或所有它們應該找到的條目。 幸運的是,這不是索引損壞的徵兆。 只有搜尋邏輯被破壞,我們可以修復它而沒有令人不快的副作用。 根據 Jason Kim 的報告。 自 btree_gin 開始以來,這一直是錯誤的,因此向後移植到所有受支援的分支。 討論:https://postgr.es/m/20210810001649.htnltbh7c63re42p@jasonk.me https://git.postgresql.org/pg/commitdiff/a6bd28beb0639d4cf424e961862a65c466ca65bf
在 s_lock.h 中新增 RISC-V spinlock 支援。 就像 ARM 的情況一樣,只需使用 gcc 的 __sync_lock_test_and_set();
,它將編譯成 AMOSWAP.W.AQ,這就是我們需要的。 在某個時候,可能值得對 RISC-V 的原子操作做一些工作,但這應該足以進行可靠的移植。 向後移植到所有受支援的分支,以防有人想在 RISC-V 上嘗試它們。 Marek Szuba 討論:https://postgr.es/m/dea97b6d-f55f-1f6d-9109-504aa7dfa421@gentoo.org https://git.postgresql.org/pg/commitdiff/c32fcac56a212b4e6bb5ba63596f60a25a18109a
取消對 s_lock_test 的破壞。 Commit 80abbeba2 顯然沒有費心檢查此程式碼。 此外,在 .gitignore 中列出產生的可執行檔(所以已經很久沒有人嘗試這個了)。 在嘗試 RISC-V spinlock 修補程式時注意到。 鑑於這已經被破壞了 5 年,而且沒有人注意到,因此可能不值得向後移植。 https://git.postgresql.org/pg/commitdiff/0a208ed63ffe50a8d9d7c0b33996ec01cc4fdef6
Andres Freund 推送
修復 BootstrapModeMain() 中的虛假斷言。 由於我在提交前「簡化」了它,因此該斷言始終為真。 根據 coverity 和 Tom Lane。 https://git.postgresql.org/pg/commitdiff/e12694523e7e4482a052236f12d3d8b58be9a22c
修正錯字。 回報者:Michael Paquier michael@paquier.xyz-- 討論:https://postgr.es/m/YRIlNQhLNfx555Nx@paquier.xyz https://git.postgresql.org/pg/commitdiff/1d5135f0043b32a7d9fdc66a9553c2078900e240
移除對沒有 BGWORKER_SHMEM_ACCESS 的後台工作者的支援。 自引入後台工作者後不久,沒有共享記憶體存取的後台工作者在 EXEC_BACKEND / windows 建置中就被破壞了,但沒有報告。 顯然它們並不常用。 問題是 bgworker 啟動需要連接到 EXEC_BACKEND 子進程中的共享記憶體。 StartBackgroundWorker() 會斷開未連接工作者的共享記憶體連接,但在那時我們已經初始化了引用共享記憶體的子系統。 修復這個問題並非完全簡單,因此移除不連接到共享記憶體的選項似乎是最好的方法。 在大多數用例中,連接到共享記憶體的優點遠大於缺點。 由於到目前為止沒有關於此問題的報告,我們已決定不值得嘗試在後端分支中解決該問題。 根據與 Alvaro Herrera、Robert Haas 和 Tom Lane 的討論。 作者:Andres Freund andres@anarazel.de 討論:https://postgr.es/m/20210802065116.j763tz3vz4egqy3w@alap3.anarazel.de https://git.postgresql.org/pg/commitdiff/80a8f95b3bca6a80672d1766c928cda34e979112
Michaël Paquier 推送
在 ALTER TABLE 中,於表格重寫的最後階段加入呼叫物件存取鉤子。ALTER TABLE .. SET {LOGGED,UNLOGGED,ACCESS METHOD} 永遠不會執行表格層級的物件存取鉤子,這與 SET TABLESPACE 不一致。請注意,與 SET TABLESPACE 不同,這些指令沒有處理無操作(no-op)的情況,因為這需要追蹤指令是否被呼叫,但它們可能不會執行實際的重寫。另一個值得注意的是,在重寫結束時的物理檔案交換,會對為交換操作建立的內部物件進行幾次存取呼叫(例如,sepgsql 的測試會跳過內部物件),但這不會觸發對執行操作的表格的鉤子。f41872d,它新增了對 ALTER TABLE 中 SET LOGGED/UNLOGGED 的支援,顯然忘記了考慮這一點。根據我檢查的結果,ddl.sql 中 sepgsql 的兩個迴歸測試將會記錄更多資訊,buildfarm 成員 rhinoceros 將很快會通知。但我不太確定它們的格式,所以這些尚未更新。這可以說是一個錯誤,但沒有進行後向移植,因為這可能會導致任何使用物件存取鉤子的人的行為發生變化。Reported-by: Jeff Davis Discussion: https://postgr.es/m/YQJKV29/1a60uG68@paquier.xyz https://git.postgresql.org/pg/commitdiff/7b565843a94412395149c6add0cbfc21d2bca0d4
修正 sepgsql 的迴歸測試輸出。差異是由於 7b56584 造成的,針對涉及表格重寫的測試。Per buildfarm 成員 rhinoceros。Discussion: https://postgr.es/m/YRHxXcyFjPuPTZui@paquier.xyz https://git.postgresql.org/pg/commitdiff/1e3445237b861fee2524defde79428058d90c0d8
在 psql 中為 DECLARE .. ASENSITIVE 新增 tab 鍵自動完成功能。此選項已在 dd13ad9 中引入。Author: Shinya Kato Discussion: https://postgr.es/m/TYAPR01MB289665526B76DA29DC70A031C4F09@TYAPR01MB2896.jpnprd01.prod.outlook.com https://git.postgresql.org/pg/commitdiff/e2ce88b58f151753b094f28bc387cebae865927c
避免在 ROLLBACK PREPARED 中不必要的共享失效。效能提升很小,但這使邏輯與 AtEOXact_Inval() 更加一致。在這種情況下,不需要其他失效,因為 PREPARE 已經負責發送任何本地失效。Author: Liu Huailing Reviewed-by: Tom Lane, Michael Paquier Discussion: https://postgr.es/m/OSZPR01MB6215AA84D71EF2B3D354CF86BE139@OSZPR01MB6215.jpnprd01.prod.outlook.com https://git.postgresql.org/pg/commitdiff/710796f0542180cca18ee93889da692df642bdf2
Daniel Gustafsson 已推送
移除未使用的迴歸測試憑證 server-ss。server-ss 憑證包含在 e39250c64 中,但從未在 TLS 迴歸測試中使用,因此將其移除。Author: Jacob Champion Discussion: https://postgr.es/m/d15a9838344ba090e09fd866abf913584ea19fb7.camel@vmware.com https://git.postgresql.org/pg/commitdiff/152c2e0ae1a8d0ed810b2e833b536e64b91da0a6
在 pgcrypto 中停用 OpenSSL EVP 摘要填充。pgcrypto 中的 PX 層正在為所有後端實作統一地處理摘要填充。從 OpenSSL 3.0.0 開始,如果啟用了填充,DecryptUpdate 不會刷新最後一個區塊,因此明確地停用它,因為我們不使用它。一旦 OpenSSL 3 在 buildfarm 中有足夠的測試,這將會後向移植到所有支援的版本。Reviewed-by: Peter Eisentraut, Michael Paquier Discussion: https://postgr.es/m/FEF81714-D479-4512-839B-C769D2605F8A@yesql.se https://git.postgresql.org/pg/commitdiff/318df802355924015d4d8f21859bc0ef7a348970
為沒有載入 legacy 的 OpenSSL 3 新增替代輸出。OpenSSL 3 引入了 providers 的概念以支援模組化,並將過時的密碼移動到新的 legacy provider。如果它沒有載入使用者的 openssl.cnf 檔案中,將會有很多迴歸測試失敗,因此新增涵蓋這些情況的替代輸出。此外,記錄需要載入 legacy provider 才能將舊版密碼與啟用 OpenSSL 的 pgcrypto 一起使用。一旦 OpenSSL 3 在 buildfarm 中有足夠的測試,這將會後向移植到所有支援的版本。Reviewed-by: Michael Paquier Discussion: https://postgr.es/m/FEF81714-D479-4512-839B-C769D2605F8A@yesql.se https://git.postgresql.org/pg/commitdiff/72bbff4cd6eaf55239ccef79cec61766b5f8f1d2
修正 sslsni connparam 布林檢查。對 sslsni 的檢查僅檢查參數是否存在,而不檢查參數的實際值。這意味著 SNI 擴展始終處於開啟狀態。透過檢查 sslsni 的值來修正,並且僅在 sslsni 已啟用時才啟動 SNI 擴展。此外,更新文件使其更符合其他布林參數的記錄方式。後向移植到 14,sslsni 首次實作的地方。Reviewed-by: Tom Lane Backpatch-through: 14, where sslni was added https://git.postgresql.org/pg/commitdiff/512f4ca6c6b5d2e3a1620288048ccaa712121e12
Heikki Linnakangas 已推送
John Naylor 已推送
修正雜湊索引 README 中的文法錯誤。Dilip Kumar Discussion: https://postgres.tw/message-id/CAFiTN-tjZbuY6vy7kZZ6xO%2BD4mVcO5wOPB5KiwJ3AHhpytd8fg%40mail.gmail.com https://git.postgresql.org/pg/commitdiff/b05f7ecec44be22f6de703e5afdeb4ff3559315a
加速 Unicode 雜湊函數的產生。Unicode 鍵集合對於用於為其產生完美雜湊函數的質數非常挑剔。呼叫者可能會花費數秒時間來迭代候選乘數和種子的所有可能組合,以找到一個可行的組合。Unicode 更新通常每年只發生一次,但它仍然使 Unicode 指令碼的開發和測試變得不必要的緩慢。為了解決這個問題,請在最內層迴圈中迭代質數。這不會更改任何已檢查到樹中的現有函數。 https://git.postgresql.org/pg/commitdiff/ba958299eaf3d2f55bddb8efb037091d14ca6fd0
Tomáš Vondra 已推送
Thomas Munro 推送了提交
Michael Meskes 推送了提交
Peter Eisentraut 推送了提交