PostgreSQL 每週新聞 - 2021 年 3 月 21 日

發布於 2021-03-22,作者:PWN
PWN

PostgreSQL 每週新聞 - 2021 年 3 月 21 日

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

PostgreSQL 產品新聞

pspg 4.4.0 已發布,這是一個專為 PostgreSQL 設計的分頁器。https://github.com/okbob/pspg/releases/tag/4.4.0

pg_activity 2.1.2 已發布,這是一個類似 top 的應用程式,用於監控 PostgreSQL 伺服器活動。https://github.com/dalibo/pg_activity/releases/tag/v2.1.2

三月份的 PostgreSQL 工作

https://archives.postgresql.org/pgsql-jobs/2021-03/

PostgreSQL 新聞

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

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

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

已套用的修補程式

Peter Geoghegan 推送

Fujii Masao 推送

  • 使歸檔程式成為輔助程式。此 commit 變更了 WAL 歸檔程式,使其被視為輔助程式,並且可以使用共享記憶體。這是即將推出的基於共享記憶體的統計資訊收集器修補程式系列所需的基礎結構修補程式。這些修補程式系列基本上需要任何可以將統計資訊報告給共享記憶體的程式,包括歸檔程式。由於此修補程式本身有助於簡化程式碼,並且當使用者監控歸檔程式的狀態時,因此提前單獨提交。此 commit 簡化了 WAL 歸檔的程式碼。例如,先前後端需要透過 postmaster 向歸檔程式發出訊號,以通知歸檔程式有一些 WAL 檔案要歸檔。另一方面,此 commit 移除了對 postmaster 的訊號,並使後端能夠使用共享閂鎖直接通知歸檔程式。此外,作為此變更的一面,關於歸檔程式的資訊可以在 pg_stat_activity 視圖中檢視。作者:Kyotaro Horiguchi 審閱者:Andres Freund、Álvaro Herrera、Julien Rouhaud、Tomas Vondra、Arthur Zakirov、Fujii Masao 討論:https://postgr.es/m/20180629.173418.190173462.horiguchi.kyotaro@lab.ntt.co.jp https://git.postgresql.org/pg/commitdiff/d75288fb27b8fe0a926aaab7d75816f091ecdc27

  • 修復 postmaster.c 中的註解。Commit 86c23a6eb2 將指定 postgres 將透過傳送訊號 SIGSTOP 來停止所有其他伺服器進程的選項,從 -s 變更為 -T。但是先前有註解錯誤地解釋說,SIGSTOP 行為是由 -s 選項設定的。此 commit 修復了這些註解。作者:Kyotaro Horiguchi 審閱者:Fujii Masao 討論:https://postgr.es/m/20210316.165141.1400441966284654043.horikyota.ntt@gmail.com https://git.postgresql.org/pg/commitdiff/fd31214075cc740e43edc71ca1c385c8c53047b7

Thomas Munro 推送

Tom Lane 推送了。

  • 解決 MinGW-64 的 setjmp/longjmp 支援中的問題。很難避免這樣的結論:MinGW-64 上的 setjmp/longjmp 存在問題,因為在我們自己的程式碼中進行了完全不相關的更改後,我們已經看到故障來來去去。其他專案(例如 Ruby)已經放棄,並開始在該平台上使用 gcc 的 setjmp/longjmp 內建函數;此修補程式只是遵循了這一領先地位。請注意,對於包含 setjmp 或 longjmp 的函數來說,這是一個相當基本的 ABI 變更,因此我們無法真正考慮回溯修補。根據 Regina Obe 和 Heath Lord 的報告,以及建置農場成員 walleye 最近的故障,以及 fairywren 不太近期的故障。Juan José Santamaría Flecha 討論:https://postgr.es/m/000401d716a0$1ed0fc70$5c72f550$@pcorp.us 討論:https://postgr.es/m/CA+BEBhvHhM-Bn628pf-LsjqRh3Ang7qCSBG0Ga+7KwhGqrNUPw@mail.gmail.com 討論:https://postgr.es/m/f1caef93-9640-022e-9211-bbe8755a56b0@2ndQuadrant.com https://git.postgresql.org/pg/commitdiff/146cb3889c3ccb3fce198fe7464a1296a9e107c3

  • 改進 BIND 訊息中錯誤參數值的日誌記錄。自 commit ba79cb5dc 以來,在擴充查詢模式下發生錯誤時,會記錄繫結參數的值。但是,我們僅在收集和轉換所有參數值後才這樣做,因此無法提供任何有用的無效參數問題的本地化。新增一個在參數收集期間使用的單獨回調,並讓它印出參數編號,以及在使用文字輸入格式時的輸入字串。Justin Pryzby 和 Tom Lane 討論:https://postgr.es/m/20210104170939.GH9712@telsasoft.com 討論:https://postgr.es/m/CANfkH5k-6nNt-4cSv1vPB80nq2BZCzhFVR5O4VznYbsX0wZmow@mail.gmail.com https://git.postgresql.org/pg/commitdiff/1ea396362be1615e926ea69d666c770081a0d3ef

  • 避免 SSL 參數處理中的邊緣情況記憶體洩漏。從 ssl_ca_file 讀取根憑證列表後,立即將其作為新 SSL 上下文的用戶端 CA 列表安裝。這樣可以使 SSL 上下文擁有該列表的所有權,以便 SSL_CTX_free 將釋放它。如果我們在 be_tls_init() 中進一步失敗,這可以避免永久的記憶體洩漏,如果提供了虛假的 CRL 資料,可能會發生這種情況。只有在伺服器啟動後 CRL 參數被破壞時,洩漏才會達到某種程度(否則我們只會退出),然後在不修復 CRL 資料的情況下多次 SIGHUP 伺服器。這可能不太可能,但似乎值得修復,即使僅僅因為程式碼以這種方式更清晰。當我們在此處時,新增一些關於此邏輯的記憶體管理方面的註解。由 Jelte Fennema 和 Andres Freund 獨立注意到。回溯修補至 v10;在 commit de41869b6 之前,這並不重要,因為我們不會在 SIGHUP 期間重新執行此程式碼。討論:https://postgr.es/m/16160-18367e56e9a28264@postgresql.org https://git.postgresql.org/pg/commitdiff/4b12ab18c9d0735d760bf7667b158707b06e5df8

  • 文件:改進 PL/pgSQL 中變數替換的討論。這部分內容有點分散,部分原因是對待不回傳結果列的 SQL 命令的文件撰寫方式,與回傳結果列的命令之間沒有共同點。重新安排,讓我們先對所有類型的 SQL 命令進行變數替換的討論,然後再單獨處理命令輸出的問題。闡明 EXPLAIN、CREATE TABLE AS SELECT 以及類似包含可優化語句的命令,在變數替換方面會像可優化的語句一樣運作。在同一區域進行一些小的文字潤飾。David Johnston 和 Tom Lane,由 Pavel Stehule 和 David Steele 審閱。討論:https://postgr.es/m/CAKFQuwYvMKucM5fnZvHSo-ah4S=_n9gmKeu6EAo=_fTrohunqQ@mail.gmail.com https://git.postgresql.org/pg/commitdiff/c783e656d41816b0328cb4bff27f11b70200770e

  • 新增 pg_basebackup 的 tar 格式輸出的端對端測試。現有的測試腳本確實使用 -Ft 選項執行 pg_basebackup,但它並沒有真正嘗試驗證結果的健全性。我們無法知道輸出是否與標準的 "tar" 程式不相容,也無法知道伺服器是否無法從還原的輸出啟動。值得注意的是,這意味著 xlog.c 的 read_tablespace_map() 沒有得到有意義的測試,因為該程式碼僅在 tar 格式的情況下使用。(我們確實對從純文字格式輸出還原進行了合理的涵蓋,儘管它位於 src/test/recovery 而不是這裡。)因此,嘗試解壓縮輸出並從中啟動伺服器,而不僅僅是希望它沒問題。此測試假設本地 "tar" 具有 "-C 目錄" 切換。儘管 POSIX 沒有保證這一點,但我的研究表明,所有非已消亡的 tar 實作都具有它。如果 buildfarm 的意見不同,我們可以稍微複雜化測試,以避免需要它。可能應該回溯修補此問題,但我不確定它在 d66b23b03 之前的 Windows 上是否可以工作。https://git.postgresql.org/pg/commitdiff/081876d75ea15c3bd2ee5ba64a794fd8ea46d794

  • 防止 read_tablespace_map() 中的緩衝區溢位。Trustwave 的 Robert Foggia 報告說,read_tablespace_map() 無法防止其堆疊輸入緩衝區溢位。由於 tablespace map 檔案被認為是可信任的,因此這似乎不是一個有趣的安全性漏洞,但我們仍然應該為了穩健性而修復它。在這邊,記錄 pg_basebackup 的 --tablespace-mapping 選項不適用於 tar 格式輸出,因為它確實如此。為了使其工作,我們必須修改伺服器傳送的 tarball 中的 tablespace_map 檔案,這可能是可能的,但我不會自願去做。(不太痛苦的解決方案需要更改 basebackup 協定,以便來源伺服器可以調整地圖。這也不是很吸引人。)https://git.postgresql.org/pg/commitdiff/a50e4fd028a1ece2b1a04df2c9ae6581783e9eef

  • 伺服器處理 "tablespace map" 檔案的程式碼審查。在查看 Robert Foggia 的報告時,我注意到同一區域中的其他一些問題。

  • 用於在路徑名稱中反斜線引用的換行符的方案是錯誤的;如果路徑名稱中的最後一個普通字元是反斜線,它將表現異常。我不確定我們為什麼要費心允許表格空間路徑中的換行符,但如果我們要這樣做,我們應該在不引入其他問題的情況下這樣做。因此,反斜線本身也必須進行反斜線處理。* 作者沒有非常仔細地閱讀 sscanf 手冊頁,因為此程式碼會從路徑中刪除任何前導空格。(我懷疑實際上可能會出現帶有前導空格的表格空間路徑;但是如果我們要費心允許路徑中的換行符,那麼前導空格似乎也不太可能。)無論如何,使用 sscanf 來尋找第一個空格是過度的。* 雖然我不確定轉義 \r 和 \n 的理由是什麼,但如果這個想法是在檔案中允許 Windows 換行符,那麼這個程式碼就會失敗,因為如果它看到 \r 後面跟著 \n,它會拋出錯誤。* 對於地圖檔案中不完整的最後一行沒有交叉檢查,這可能是錯誤轉義的明顯症狀。在產生端,除了轉義問題之外,我們還有:* 如果 needtblspcmapfile 為 true,則 do_pg_start_backup 將在 tablespaceinfo->path 值中傳回轉義字串,這是任何呼叫者都不想要或準備處理的。我不確定是否存在由此產生的實際錯誤,但看起來可能存在(假設實際上有人在其表格空間路徑中具有換行符)。* 對於 pg_tblspc 目錄中隨機內容的可能性,它不是很偏執。我認為我們應該忽略任何沒有類似 OID 名稱的東西。轉義規則的更改似乎無法回溯修補:它需要在 tablespace_map 檔案中加倍反斜線,這基本上是一個 basebackup 格式的更改。這造成麻煩的可能性遠遠大於現有錯誤造成麻煩的可能性。其餘的似乎也不太可能造成問題,因此沒有回溯修補。https://git.postgresql.org/pg/commitdiff/8620a7f6dbdf978e57cdb9f42802a0418656d863

  • 文件:移除 RLS 範例中的重複步驟。似乎是 093129c9d 中的複製貼上錯誤。根據 max1@inbox.ru 的報告。討論:https://postgr.es/m/161591740692.24273.4202054598867879464@wrigleys.postgresql.org https://git.postgresql.org/pg/commitdiff/70945649d734d16be22c3d1d90dd8c3d3c1e9d89

  • 修正對 foreach_delete_current() 的誤用。我們的程式碼慣例要求將此巨集的結果分配回原始的 List 變數。在此使用中,由於 List 不可能變為空,因此沒有實際錯誤 --- 但某些編譯器對此發出警告。be45be9c3 中的疏忽。討論:https://postgr.es/m/35077b31-2d62-1e31-0e2e-ddb52d590b73@enterprisedb.com https://git.postgresql.org/pg/commitdiff/1d581ce7129d7a33cd4ad27f8f246abfa1fd2db9

  • 當丟棄 relcache 條目時,不要洩漏 rd_statlist。雖然這些列表通常是 NIL,即使不為空也不太可能很大,但恆定的 relcache 更新流量最終可能導致 CacheMemoryContext 的明顯膨脹。透過 valgrind 測試發現。回溯修補到 v10,該欄位是在該版本中新增的。討論:https://postgr.es/m/3816764.1616104288@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/28644fac10731e30e70b622986a6fbbeb5a5b2f9

  • 不要在 libpqrcv_check_conninfo() 中洩漏 malloc'd 錯誤字串。當存在錯誤報告時,我們從 PQconninfoParse 洩漏了錯誤報告。實際使用模式不太可能經常重複失敗以產生嚴重的膨脹,但無論如何我們都回溯修補,以保持所有分支中的程式碼相似。透過 valgrind 測試發現。回溯修補到 v10,該程式碼是在該版本中新增的。討論:https://postgr.es/m/3816764.1616104288@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/9bacdf9f536a3720976ae258238cb46c691ce9b2

  • 當丟棄 ispell 快取條目時,不要洩漏已編譯的 regex(es)。文字搜尋快取機制假設我們可以簡單地透過重設相關的長期記憶體內容來清理無效的字典快取條目。但是,這不適用於使用正則表達式的 ispell 字綴,因為 regex 庫處理的是普通的 malloc。因此,我們每次丟棄此類快取條目時都會洩漏已編譯的 regex(es)。這可能會很快累積起來,因為即使是一個相當簡單的 regex 也會佔用數十 kB,而一個大的 regex 則會佔用數 MB。新增一個記憶體內容回呼,以確保在清除其擁有的快取條目時釋放 regex。透過 valgrind 測試發現。這個問題很古老,因此回溯修補到所有支援的分支。討論:https://postgr.es/m/3816764.1616104288@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/d303849b059c3c315e5a8d4239016f8328f3296c

  • 不要在長時間存在的環境中執行 RelationInitTableAccessMethod。此函數中的某些程式碼路徑會執行 syscache 查找,這可能會導致表格存取,並可能將雜質洩漏到呼叫者的環境中。如果該環境是 CacheMemoryContext,最終我們會看到明顯的膨脹。但修正這個問題並不困難,只需移動一個記憶體環境切換步驟即可。(其他呼叫者沒有問題。)Andres Freund 和我各自通過 valgrind 測試發現了這個問題。回溯修補到 v12,此程式碼是在此版本中添加的。討論:https://postgr.es/m/20210317023101.anvejcfotwka6gaa@alap3.anarazel.de 討論:https://postgr.es/m/3816764.1616104288@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/415ffdc2205e209b6a73fb42a3fdd6e57e16c7b2

  • 當 GUC 設定被拒絕時,不要洩漏 malloc 分配的字串。由於 guc.c 傾向於將其所有字串值保存在 malloc 而非 palloc 的儲存空間中,因此它必須比平常更小心以避免洩漏。字串 GUC 鉤子檢查的錯誤退出未能清除提議的值字串,並且 ProcessGUCArray() 的錯誤退出未能清除 ParseLongOption() 的 malloc 分配的結果。通過 valgrind 測試發現。這個問題由來已久,因此回溯修補到所有支援的分支。討論:https://postgr.es/m/3816764.1616104288@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/377b7a83007d277d32ef19f7c7590c8668d504cb

  • 盲目地嘗試修復測試腳本針對 MSYS 的 tar 呼叫。Buildfarm 成員 fairywren 不喜歡我在 commit 081876d75 中添加的測試案例。我猜原因是我不應該在 tar 命令行中使用 perl2host 化的路徑。https://git.postgresql.org/pg/commitdiff/27ab1981e7c9b8fcbcb143c5f6f706441a52bbc8

  • 避免在 RestoreGUCState() 中洩漏記憶體,並改進註解。RestoreGUCState 將 InitializeOneGUCOption 應用於已經存在的 GUC 條目,導致任何 malloc 分配的附屬資料被遺忘。我們確實需要將 GUC 重置為其編譯時預設值的效果,並且 InitializeOneGUCOption 似乎是執行此操作的最佳方式,因此添加程式碼以事先釋放任何現有的附屬資料。can_skip_gucvar、SerializeGUCState 和 RestoreGUCState 之間的交互比它們不透明的註解建議的要微妙得多,對於粗心大意的讀者來說。重寫並擴大註解,以嘗試更清楚地說明正在發生的事情。刪除 read_nondefault_variables 中一個長期過時的斷言:自 f5d9698a8 安裝了更好的控制方式以來,set_config_option 的行為不再依賴於 IsInitProcessingMode。雖然這是修復明顯的記憶體洩漏,但該洩漏不太可能涉及任何大量資料,並且它只會在工作程序的存在期間發生一次。因此,似乎沒有必要冒任何回溯修補的風險。討論:https://postgr.es/m/4105247.1616174862@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/f0c2a5bba6c566fad781802537eb17f2977702bc

  • 修復拒絕錯誤 DH 參數時的記憶體洩漏。在回溯修補 e0e569e1d 時,我注意到還有一些其他地方應該應用 DH_free();也就是說,我們從檔案中載入一些 DH 參數,然後拒絕它們,因為它們不夠安全。雖然似乎不太可能有人會在生產環境中遇到這些程式碼路徑,更不用說重複執行,但讓我們為了保持一致性而修復它。回溯修補到 v10,此程式碼是在此版本中引入的。討論:https://postgr.es/m/16160-18367e56e9a28264@postgresql.org https://git.postgresql.org/pg/commitdiff/e835e89a0fd267871e7fbddc39ad00ee3d0cb55c

  • 修復 pg_dump 對每個屬性壓縮選項的處理。commit bbe0a81db 中使用的方法對於 dump 的可移植性來說將是災難性的。相反,在單獨的 ALTER TABLE 命令中處理非預設的壓縮選項。這減少了大多數列以相同方式壓縮的常見情況下的冗餘,並且可以將 dump 還原到缺少每個屬性壓縮選項的任何知識的伺服器(只要你願意忽略 ALTER TABLE 命令的語法錯誤)。在 bbe0a81db 之後還有很多工作要做,但我正在快速追蹤這部分,因為我們需要看看它是否足以讓 buildfarm 的跨版本升級測試感到滿意。Justin Pryzby 和 Tom Lane 討論:https://postgr.es/m/20210119190720.GL8560@telsasoft.com https://git.postgresql.org/pg/commitdiff/aa25d1089ac00bbc3f97d2efe8f54c3d4beed5d1

  • 抑制各種新的編譯器警告。不理解 elog(ERROR) 不會返回的編譯器在這裡發出警告。在 libpq_pipeline.c 中的情況下,我們未能將 pg_fatal() 標記為 noreturn 也沒有真正幫助。每個 buildfarm。https://git.postgresql.org/pg/commitdiff/9fb9691a88ae8df9bc30e0f0f72de7c96e73e125

Álvaro Herrera 推送

Michaël Paquier 推送

Stephen Frost 推送

Robert Haas 推送

  • 修正一個令人困惑的 amcheck 損毀訊息。如果根本沒有 TOAST 區塊,則不要抱怨最後一個 TOAST 區塊編號與我們預期的不同。在這種情況下,說最後的區塊編號是 0 並不完全準確,而且該值從 TOAST 表中遺失的事實也會單獨報告。Mark Dilger 討論:http://postgr.es/m/AA5506CE-7D2A-42E4-A51D-358635E3722D@enterprisedb.com https://git.postgresql.org/pg/commitdiff/4078ce65a0f7197180a9be2c6460ea4bf909bd98

  • 允許可配置的 LZ4 TOAST 壓縮。現在有一個 per-column COMPRESSION 選項,可以設定為 pglz(預設值,也是到目前為止唯一的選項)或 lz4。或者,如果您願意,您可以將新的 default_toast_compression GUC 設定為 lz4,然後這將成為沒有指定值的新的資料表欄位的預設值。由於 PostgreSQL 程式碼中沒有 lz4 支援,因此要使用 lz4 壓縮,必須使用 --with-lz4 建置 PostgreSQL。一般來說,TOAST 壓縮是指對單獨的欄位值進行壓縮,而不是對整個 tuple 進行壓縮,並且這些值可以內聯壓縮到 tuple 中,或者壓縮後外部儲存在 TOAST 表中,因此這些屬性也適用於此功能。在此提交之前,TOAST 指標在 va_extsize 欄位中有兩個未使用的位元,而壓縮的 datum 在 va_rawsize 欄位中有兩個未使用的位元。這些位元未被使用,因為 varlena 的長度限制為 1GB;我們現在使用它們來指示使用的壓縮類型。這意味著我們只有位元空間來容納另外 2 種內建壓縮類型,但如果需要,我們可以透過為我們最終想要添加的任何其他類型引入一個新的 vartag_external 值來解決這個問題。希望提供多種演算法選擇並不太重要,因為我們添加的每一種演算法不僅需要更多的程式碼,而且還為每個封裝程式增加了建置依賴性。儘管如此,至少做這麼多似乎還是值得的,因為 LZ4 比 PGLZ 壓縮效果更好,而且 CPU 使用率更低。LZ4 壓縮的 datum 可能會洩漏到磁碟上儲存的複合類型值中,就像 PGLZ 一樣。LZ4 壓縮的屬性也可能透過 SQL 指令(例如 CREATE TABLE AS 或 INSERT .. SELECT)複製到不同的資料表中。強制解壓縮這些值會很昂貴,因此 PostgreSQL 從未這樣做過。基於同樣的原因,即使目標資料表偏好的壓縮方法與用於來源資料的方法不同,我們也不會強制重新壓縮已壓縮的值。這些架構決策或許有爭議,但重新審視它們遠遠超出了作為此專案的一部分所能做到的範圍。但是,在 VACUUM FULL 或 CLUSTER 中重新壓縮相對便宜,因此此提交調整了這些指令來執行此操作,如果資料表的配置壓縮方法恰好與儲存在其中的某些欄位值所使用的方法不符。Dilip Kumar。此工作所基於的原始 patch 由 Ildus Kurbangaliev 編寫,而這些 patch 又是基於 Nikita Glukhov 更早的工作,但此後設計發生了重大變化,因為允許在運行的系統上添加和刪除大量壓縮方法被證明太過於困難,因為上面提到了一些架構問題;現在首先添加哪個特定壓縮方法的選擇也不同了;並且許多程式碼都經過了大量重構。最近,Justin Przyby 在測試和審閱方面提供了相當多的幫助,並且此版本還包含了他的一些程式碼貢獻。來自 Tomas Vondra、Álvaro Herrera、Andres Freund、Oleg Bartunov、Alexander Korotkov 和我的其他設計輸入和審閱。討論:http://postgr.es/m/20170907194236.4cefce96%40wp.localdomain 討論:http://postgr.es/m/CAFiTN-uUpX3ck%3DK0mLEk-G_kUQY%3DSNOTeqdaNRR9FMdQrHKebw%40mail.gmail.com https://git.postgresql.org/pg/commitdiff/bbe0a81db69bd10bd166907c3701492a29aca294

  • 修正 ATExecAlterColumnType 中的 use-after-ReleaseSysCache 問題。由 commit bbe0a81db69bd10bd166907c3701492a29aca294 引入。根據 buildfarm 成員 prion。https://git.postgresql.org/pg/commitdiff/d00fbdc431192c3e429b3e91c43d364e5c7ba680

Amit Kapila 推送

Peter Eisentraut 推送

Andres Freund 推送

Magnus Hagander 推送

Tomáš Vondra 推送

Andrew Dunstan 推送了變更

待處理的補丁

Erica Zhang 發送了另一個修訂版本的補丁,以在 contrib 下添加一些用於 pg_stat_statements 相容性驗證的測試。

Jürgen Purtz 發送了另一個修訂版本的補丁,以更改 JOIN 教學課程,使其更側重於顯式連接 (explicit joins)。

Noah Misch 發送了一個補丁,將類似的演算法合併到 roles_is_member_of() 中。

David Rowley 發送了另一個修訂版本的補丁,以快取 PathTarget 和 RestrictInfo 的 volatility,允許 estimate_num_groups() 傳回有關估算的更多細節,允許 simplehash.h 的使用者執行直接刪除,添加 Result Cache 執行器節點,並刪除 nodeResultCache.c 中的程式碼重複。

Vigneshwaran C 發送了一個補丁,如果在事務鎖定了系統表/使用者目錄表的情況下,則會使預備事務失敗。

Laurenz Albe 發送了另一個修訂版本的補丁,如果編輯器在未保存的情況下退出,則通過擦除查詢緩衝區而不是執行先前的語句來改進 \e、\ef 和 \ev。

Nathan Bossart 發送了另一個修訂版本的補丁,以避免過早地創建歸檔狀態 ".ready" 檔案,並追蹤通過崩潰通知的準備好歸檔的位置。

Mike Insoo 發送了一個補丁,檢查在解碼目錄修改提交紀錄時,它是否是 RUNNING_XACT xid 在 restart_lsn 處理的一部分。如果是,則將其 xid & subxacts 添加到邏輯解碼快照中的已提交事務列表中。

Justin Pryzby 發送了三個修訂版本的補丁,使其可以為 FPI 使用不同的壓縮方法。

Jim Mlodgenski 發送了另一個修訂版本的補丁,以添加一個解析器鉤子 (parser hook) 和一個使用它的測試。

Julien Rouhaud 發送了另一個修訂版本的補丁,為 REINDEX 命令添加了一個新的 OUTDATED 過濾設施,以及 reindexdb 實用程式的相應選項。使用後,REINDEX 將僅處理具有過時依賴關係的索引。目前,僅支援對照 (collation) 的依賴關係,但我們將來可能會支援其他類型的依賴關係。

Georgios Kokolatos 和 Michaël Paquier 交換了補丁,使 dbsize 更加一致。

Amit Kapila、Justin Pryzby 和 Greg Nancarrow 交換了補丁,使其可以並行執行 INSERT .... SELECT。

Bruce Momjian 發送了兩個修訂版本的補丁,以實現金鑰管理。

Bharath Rupireddy 發送了四個修訂版本的補丁,以添加一個帶有等待和超時的 pg_terminate_backend() 版本。

Masahiro Ikeda 發送了另一個修訂版本的補丁,使 WAL 接收器報告 WAL 統計訊息。

Iwata Aya 發送了四個修訂版本的補丁,以實現 libpq 除錯日誌。

Amul Sul 發送了兩個修訂版本的補丁,以添加 ALTER SYSTEM READ {ONLY | WRITE} 將使用的基礎架構。

Jacob Champion 和 Michaël Paquier 交換了補丁,以從所有身份驗證後端記錄經過身份驗證的身份。

Masahiro Ikeda 發送了四個修訂版本的補丁,使統計訊息收集器在請求立即關機時,關閉而不寫入統計訊息檔案。

Mark Rofail 和 Andreas Karlsson 交換了補丁,以實現外鍵陣列。

Ajin Cherian、Peter Smith 和 Takamichi Osumi 交換了補丁,以實現兩階段事務的邏輯解碼。

Álvaro Herrera 發送了三個修訂版本的補丁,以實現 ALTER TABLE .. DETACH PARTITION CONCURRENTLY。

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

IIvan Panchenko 發送了另一個修訂版本的補丁,以添加登入觸發器。

Peter Eisentraut 發送了另一個修訂版本的補丁,使其可以從程序中獲取動態結果集。在程序中宣告帶有 RETURN 的游標會使游標的資料作為 CALL 呼叫的結果返回。該程序需要使用 DYNAMIC RESULT SETS 屬性宣告。

Amit Kapila 發送了一個文件補丁,以在 pg_subscription 中添加 substream 的描述。

Amit Kapila 發送了一個補丁,以防止在創建 tablesync slot 時發生取消/終止中斷。

Bharath Rupireddy 發送了另一個修訂版本的補丁,以重構實現 REFRESH MATERIALIZED VIEW 的程式碼,以提高可理解性。

Ranier Vilela 發送了一個補丁,以涵蓋在 Windows 上重新命名檔案的一個邊緣情況。

Hou Zhijie 發送了另一個修訂版本的補丁,以擴展安全檢查以支援並行插入到 fk 關係中,並跳過 CommandCounterIncrement。

Fujii Masao 發送了兩個修訂版本的補丁,以改進 pgbench 的 \sleep 命令。

Andres Freund 和 Kyotaro HORIGUCHI 交換了補丁,使統計訊息收集器使用共享記憶體而不是檔案作為統計訊息收集器中的臨時儲存。

Masahiko Sawada 發送了另一個修訂版本的補丁,以修復涉及多個 postgres 外部伺服器的事務。

Bharath Rupireddy 發送了另一個修訂版本的補丁,以改進 PID XXXX 不是 PostgreSQL 伺服器程序訊息。不要使用訊息“不是伺服器程序”,而是說“不是後端程序”。這將清楚地表明給定的 PID 不是後端程序,但它可以是某些其他程序的 pid 或某些其他 postmaster 子程序的 pid 或無效的 pid。

Zeng Wenjing 發送了另一個修訂版本的補丁,以實現全域臨時表。

Tomáš Vondra 發送了另一個修訂版本的補丁,以實現索引跳躍掃描。

Atsushi Torikoshi 發送了另一個修訂版本的補丁,以添加 memorycontext elog 列印。

John Naylor 發送了兩個修訂版本的補丁,以修復堆疊空間管理中的一個錯誤,該錯誤對 fillfactor 過於謹慎。以前,如果頁面中存在剩餘的未使用行指標,則 fill factor 較低的表將無法用於大到足以超過 fillfactor 的新元組,即使該頁面根本不包含任何元組。這導致了不必要的關係擴展。通過允許一些等於行指標可能佔用的最大空間的 1/8 的鬆弛空間來修復。這有點隨意,但應該允許許多以前失敗的案例成功。根據 Floris van Nee 的報告。

Pavel Stěhule 發送了另一個修訂版本的補丁,以將常式標籤添加到 PL/pgsql。

Michaël Paquier 發送了另一個修訂版本的補丁,以修復 PITR 和 2PC 之間的不協調。

Bertrand Drouvot 發送了另一個修訂版本的補丁,以在備用伺服器上實現最小邏輯解碼。

Amit Langote 發送了一個補丁,以調整在級聯 RI 更新/刪除期間序列化失敗的處理。

Peter Eisentraut 送出另一個 ibpq 的修正檔:為 SSL 連線設定伺服器名稱指示 (SNI)。預設情況下,讓 libpq 設定 TLS 擴充功能「伺服器名稱指示」(SNI)。這允許具有 SNI 感知的 SSL 代理路由連線。(這需要一個知道 PostgreSQL 協議的代理,而不僅僅是任何 SSL 代理。)未來,這也可能允許伺服器針對不同的主機規格使用不同的 SSL 憑證。(這將需要新的伺服器功能。這將是該功能的用戶端功能。)由於 SNI 使主機名稱以明文形式出現在網路流量中,因此在某些情況下可能是不希望的。因此,也新增一個 libpq 連線選項「sslsni」來關閉它。

Amit Langote 送出另一個修正檔,用於在輸入關聯為分割的情況下,標記完全分組的關聯為分割,並允許在分割表格上設定 parallel_workers。

Ibrar Ahmed 送出另一個修正檔,使其可以使用 BulkInsertState 和 multi-insert 來進行 INSERT SELECT。

John Naylor 送出另一個修正檔,用於向編碼轉換函數新增 'noError' 參數,並使用相同的參數在較大的區塊中進行 COPY FROM 編碼轉換/驗證。

Thomas Munro 送出另一個修正檔,用於對 WAL 進行預取。

Peter Geoghegan 送出一個修正檔,新增一種在使用 git blame 時忽略 pgindent 執行和類似操作的方法。

Peter Eisentraut 送出另一個修正檔,新增 result_format_auto_binary_types 設定。

Fujii Masao 送出另一個修正檔,將 WalReceiverWaitStart 等待事件的類型從 Client 變更為 IPC。

Marina Polyakova 送出一個修正檔,通過允許並行載入 WAL 檔案,來減少從封存檔案中還原資料庫所需的時間。

Peter Eisentraut 送出另一個修正檔,以實作 SQL 標準函數主體。

Andrei Zubkov 送出一個修正檔,以更正 pg_stat_statements 中的解除分配事件計數。

James Coleman 送出另一個修正檔,以改進待命連線被拒絕的錯誤訊息。目前,當待命伺服器完成啟動但 hot_standby 設定為 off 時,用戶端連線時的錯誤訊息為「資料庫系統正在啟動」,這是不必要的混淆(並且實際上也不是很準確)。而是發送一個有用的錯誤訊息,以便使用者立即知道他們的伺服器已設定為拒絕這些連線。

John Naylor 送出另一個修正檔,用於向編碼轉換函數新增 'noError' 參數,然後使用相同的參數來替換 pg_utf8_verifystr() 與兩個更快的實作:一個使用 Intel 上的 SSE-4.1 指令,另一個使用客製化的備用函數,而不是依賴於 pg_utf8_verifychar() 和 pg_utf8_isvalid() 的函數。這個版本大致基於 simdjson 函式庫中的備用版本。

Peter Eisentraut 送出另一個修正檔,以將 EXTRACT 的回傳類型變更為 numeric。

James Coleman 送出另一個修正檔,以在 OR'd ScalarArrayOps 中雜湊查找 const 陣列。

Amit Khandekar 送出另一個修正檔,透過使用 64 位元區塊而不是 char 值,並避免為 pg_popcount32/64() 呼叫函數指標反向引用,來加速 tsvectors 的兩個 gist 索引簽名的 xor'ing。

Etsuro Fujita 送出另一個修正檔,以實作 postgres_fdw 節點上的非同步附加。

Konstantin Knizhnik 送出另一個修正檔,以新增兩個統計 GUC 到 auto_explain:add_statistics_threshold 和 add_statistics_suggest_only。

Gilles Darold 送出另一個修正檔,以在 XactCommand 層級新增 hooks。

Tatsuo Ishii 送出另外三個修正檔,使其可以在 pgbench 中使用 COPY FREEZE。

Julien Rouhaud 送出另一個修正檔,以將 queryId 新增到 pg_catalog.pg_stat_activity 檢視。

Amit Langote 送出另一個修正檔,匯出 get_partition_for_tuple(),使其對 execPartition.c 以外的事物可見,並在其他地方使用它,以避免為某些 RI 檢查使用 SPI。

Peter Smith 送出一個修正檔,修正了程式碼在 stream_cleanup_files 中取消引用 HASH_REMOVE 傳回的雜湊條目的錯誤。

Thomas Munro 送出另一個修正檔,以支援 psql 的 \watch 命令的 PSQL_WATCH_PAGER,並嘗試 sigwait() 使其工作。

Michaël Paquier 送出一個修正檔,以清理 Kerberos 驗證測試。

Thomas Munro 送出另一個修正檔,以提供 recovery_init_sync_method=wal。

Gilles Darold 和 Erik Rijkers 交換了修正檔,以新增一些新的函數,用於計算和以其他方式描述 regexp 匹配。

David Fetter 送出另一個修正檔,以實作 popcount (現在稱為 bit_count)。

Justin Pryzby 送出另一個修正檔,以新增一種方法來為 FPI 使用不同的壓縮方法。

Matthias van de Meent 送出一個修正檔,以確保當 [+] 是 psql meta 命令的選項時,\? 輸出會提到它,而不是其他情況。

Jan Wieck 和 Tom Lane 交換了修正檔,以確保 pg_upgrade 保留 datdba。

Konstantin Knizhnik 送出另一個修正檔,以實作內建的連線池。