本週人物:https://postgresql.life/post/anastasia_lubennikova/
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
https://archives.postgresql.org/pgsql-jobs/2021-03/
Planet PostgreSQL:https://planet.postgresql.org/
本週的 PostgreSQL 每週新聞由 David Fetter 帶給您
請在星期日下午 3:00(太平洋標準時間/太平洋夏令時間)之前將新聞和公告提交至 david@fetter.org。
Peter Geoghegan 推送
請注意,VACUUM 期間堆積頁面有已刪除的項目。一致地設定一個旗標變數,該變數追蹤在惰性 vacuum 的堆積掃描期間目前堆積頁面是否具有已刪除的項目。我們錯過了存在現有(甚至新的)LP_DEAD 堆積行指標的常見情況。另外,清楚說明該變數可能會受到現有行指標的影響,例如來自先前的機會性修剪操作。這種區別很重要,因為這是我們不能只使用附近的 tups_vacuumed 變數的主要原因。沒有向後移植。理論上,未能設定頁面層級的旗標變數不會產生任何後果。目前,它僅用於防禦性地檢查標記為全部可見的頁面是否具有已刪除的項目,這無論如何都不應該發生(如果發生,則該表一定已損壞)。作者:Masahiko Sawada sawada.mshk@gmail.com 診斷者:Masahiko Sawada sawada.mshk@gmail.com 討論:https://postgr.es/m/CAD21AoAtZb4+HJT_8RoOXvu4HM-Zd4HKS3YSMCH6+-W=bDyh-w@mail.gmail.com https://git.postgresql.org/pg/commitdiff/0ea71c93a06ddc38e0b72e48f1d512e5383a9c1b
amcheck:降低偵錯訊息的詳細程度。空同級頁面有時可能比我們在 elevel DEBUG1 上報告的任何其他事件更常見。將相關情況的 elevel 提高到 DEBUG2,以避免使用相對不重要的細節來淹沒使用者。https://git.postgresql.org/pg/commitdiff/65445469d6de3670f3e027236613e093e119ec55
修正關於 promising tuples 的註解。commit d168b666823 中的疏忽,該 commit 新增了由下而上的索引刪除。https://git.postgresql.org/pg/commitdiff/fbe4cb3bd49f9e524f53ef77c775c1bad4d0312a
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 推送
從平行查詢測試中刪除 SERIALIZABLE 解決方法。SERIALIZABLE 不再禁止平行處理,因此我們可以從迴歸測試中刪除一些過時的解決方法和註解。此變更來自版本 12,commit bb16aba5,但實際上不值得向後移植。此外,修復一個錯字。審閱者:Bharath Rupireddy bharath.rupireddyforpostgres@gmail.com 討論:https://postgr.es/m/CA%2BhUKGJUaHeK%3DHLATxF1JOKDjKJVrBKA-zmbPAebOM0Se2FQRg%40mail.gmail.com https://git.postgresql.org/pg/commitdiff/eeb60e45d82d5840b713a8741ae552238d57e8b9
在 REFRESH MATERIALIZED VIEW 中啟用平行處理。將 CURSOR_OPT_PARALLEL_OK 傳遞給 pg_plan_query(),以便在執行底層 SELECT 查詢時考慮平行計畫。這並未在 commit e9baa5e9 中完成,該 commit 為 CREATE MATERIALIZED VIEW 完成了此操作,因為當時尚未知道它是安全的。由於 REFRESH 總是先插入到新建立的表中,然後再使用單獨的操作將資料合併或交換到適當的位置,因此我們也可以在此處啟用此類計畫。作者:Bharath Rupireddy bharath.rupireddyforpostgres@gmail.com 審閱者:Hou, Zhijie houzj.fnst@cn.fujitsu.com 審閱者:Luc Vlaming luc@swarm64.com 審閱者:Thomas Munro thomas.munro@gmail.com 討論:https://postgr.es/m/CALj2ACXg-4hNKJC6nFnepRHYT4t5jJVstYvri%2BtKQHy7ydcr8A%40mail.gmail.com https://git.postgresql.org/pg/commitdiff/9e7ccd9ef64d05e87ceb1985d459bef9031205c0
在更高的隔離等級中修復 transaction.sql 測試。似乎能夠針對預設交易等級設定為 serializable 或 repeatable read 的叢集執行「installcheck」是一個有用的健全性檢查。目前只有一件事在這些配置中失敗,因此讓我們修復它。目前沒有向後修補,因為它在某些穩定分支的許多其他地方失敗。如果我們在自動化測試中包含此配置,則我們也必須回頭修復這些配置。審閱者:Tom Lane tgl@sss.pgh.pa.us 討論:https://postgr.es/m/CA%2BhUKGJUaHeK%3DHLATxF1JOKDjKJVrBKA-zmbPAebOM0Se2FQRg%40mail.gmail.com https://git.postgresql.org/pg/commitdiff/37929599499fe5760a9dbab48a10a898879a0d44
修正平行雜湊聯結(Parallel Hash Join, PHJ)批次清除中的競爭情況。在非常不幸的時機,且 `parallel_leader_participation` 關閉的情況下,PHJ可能嘗試存取正在釋放的每個批次的狀態。原先有程式碼旨在透過檢查是否已清除指標來防止這種情況,但該程式碼存在錯誤。修正方式是引入一個額外的屏障階段。新的階段 `PHJ_BUILD_RUNNING` 表示可以安全地存取每個批次的狀態以尋找可協助的批次,而 `PHJ_BUILD_DONE` 表示已經太晚了。與之前一樣,最後一個分離的程序將釋放每個批次狀態的陣列,但現在它也會同時原子性地推進階段,以便稍後附加的程序可以避免危險,而不會發生資料競爭。這與釋放每個批次雜湊表的方式(請參閱階段 `PHJ_BATCH_PROBING` 和 `PHJ_BATCH_DONE`)相似。由一次性的建置農場故障所揭露,其中 `BarrierAttach()` 的健全性檢查斷言失敗,因為記憶體已被 `dsa_free()` 覆蓋。回溯修補至 11,此程式碼首次出現的地方。報告人:Michael Paquier michael@paquier.xyz 討論:https://postgr.es/m/20200929061142.GA29096%40paquier.xyz https://git.postgresql.org/pg/commitdiff/3b8981b6e1a2aea0f18384c803e21e9391de669a
更新平行雜湊聯結(Parallel Hash Join, PHJ)階段的名稱。Commit 3048898e 從一些對應於屏障階段的等待事件名稱中刪除了 `-ING`。更新階段的名稱以匹配。當我們在此進行外觀修改時,也將 "DONE" 重命名為 "FREE"。這與 "ALLOCATE" 更相配,並描述了該階段實際發生的活動(正如我們對其他階段所做的那樣),而不是描述一種狀態。在錯誤修復 commit 3b8981b6 將該階段拆分為兩個階段後,這種區別更加清晰。至於增長屏障,將其 "ALLOCATE" 階段重命名為 "REALLOCATE",這可能更好地描述了當時發生的情況。同時也稍微改進了有關這些階段的註解。討論:https://postgr.es/m/CA%2BhUKG%2BMDpwF2Eo2LAvzd%3DpOh81wUTsrwU1uAwR-v6OGBB6%2B7g%40mail.gmail.com https://git.postgresql.org/pg/commitdiff/378802e3713c6c0fce31d2390c134cd5d7c30157
還原 "Fix race in Parallel Hash Join batch cleanup."。這會還原 commit 378802e3713c6c0fce31d2390c134cd5d7c30157。這會還原 commit 3b8981b6e1a2aea0f18384c803e21e9391de669a。討論:https://postgr.es/m/CA%2BhUKGJmcqAE3MZeDCLLXa62cWM0AJbKmp2JrJYaJ86bz36LFA%40mail.gmail.com https://git.postgresql.org/pg/commitdiff/7f7f25f15edb6eacec58179ef5285e874aa4435b
提供 recovery_init_sync_method=syncfs。自 commit 2ce439f3 以來,我們在資料目錄中開啟了每個檔案,並在崩潰恢復開始時呼叫了 fsync()。如果檔案很多,這可能會非常慢,導致現場抱怨系統需要幾分鐘甚至幾小時才能開始崩潰恢復。提供了一種替代方法,僅適用於 Linux,我們在資料目錄下的每個可能不同的檔案系統上呼叫 syncfs()。這相當於避免從可能緩慢的儲存裝置中引入潛在的許多 inode。新模式帶有一些注意事項,文件中已說明,因此新設定的預設值為 "fsync",保留了舊的行為。報告人:Michael Brown michael.brown@discourse.org 審閱人:Fujii Masao masao.fujii@oss.nttdata.com 審閱人:Paul Guo guopa@vmware.com 審閱人:Bruce Momjian bruce@momjian.us 審閱人:Justin Pryzby pryzby@telsasoft.com 審閱人:David Steele david@pgmasters.net 討論:https://postgr.es/m/11bc2bb7-ecb5-3ad0-b39f-df632734cd81%40discourse.org 討論:https://postgr.es/m/CAEET0ZHGnbXmi8yF3ywsDZvb3m9CbdsGZgfTXscQ6agcbzcZAw%40mail.gmail.com https://git.postgresql.org/pg/commitdiff/61752afb26404dfc99a535c7a53f7f04dc110263
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 推送
在 libpq 中實現管線模式。libpq 中的管線模式允許應用程式避免 FE/BE 協議中的 Sync 訊息,這些訊息在每次查詢後隱含在舊的 libpq API 中。然後,應用程式可以使用新的 libpq 函數 PQpipelineSync 隨時插入 Sync。這可以大大減少查詢延遲。共同作者:Craig Ringer craig.ringer@enterprisedb.com 共同作者:Matthieu Garrigues matthieu.garrigues@gmail.com 共同作者:Álvaro Herrera alvherre@alvh.no-ip.org 審閱人:Andres Freund andres@anarazel.de 審閱人:Aya Iwata iwata.aya@jp.fujitsu.com 審閱人:Daniel Vérité daniel@manitou-mail.org 審閱人:David G. Johnston david.g.johnston@gmail.com 審閱人:Justin Pryzby pryzby@telsasoft.com 審閱人:Kirk Jamison k.jamison@fujitsu.com 審閱人:Michael Paquier michael.paquier@gmail.com 審閱人:Nikhil Sontakke nikhils@2ndquadrant.com 審閱人:Vaishnavi Prabakaran VaishnaviP@fast.au.fujitsu.com 審閱人:Zhihong Yu zyu@yugabyte.com 討論:https://postgr.es/m/CAMsr+YFUjJytRyV4J-16bEoiZyH=4nj+sQ7JP9ajwz=B4dMMZw@mail.gmail.com 討論:https://postgr.es/m/CAJkzx4T5E-2cQe3dtv2R78dYFvz+in8PY7A8MArvLhs_pg75gg@mail.gmail.com https://git.postgresql.org/pg/commitdiff/acb7e4eb6b1c614c68a62fb3a6a5bba1af0a2659
將 libpq 管線模式支援添加到 pgbench。新的 metacommands \startpipeline 和 \endpipeline 允許使用者在 libpq 管線模式下執行查詢。作者:Daniel Vérité daniel@manitou-mail.org 審閱人:Álvaro Herrera alvherre@alvh.no-ip.org 討論:https://postgr.es/m/b4e34135-2bd9-4b8a-94ca-27d760da26d7@manitou-mail.org https://git.postgresql.org/pg/commitdiff/9aa491abbf07ca8385a429385be8d68517384fdf
(盲目地)修復 Perl 在換行符處分割字串。我忘記了 Windows 將換行符表示為 \r\n,因此在 /\s/ 處分割字串會建立額外的空字串。讓我們將其重寫為 /\s+/ 以查看是否可以避免這些。 (在其他腳本中,以前在 Windows 上使用過這種模式。)先前:91bdf499b37b、8ed428dc977f、650b96707672。每個 buildfarm,通過 Tom Lane。討論:https://postgr.es/m/3144460.1615860259@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/015061690c6526ff9f9f7af2940e1c1541654b68
修復 libpq 中的新記憶體洩漏。我在 commit 9aa491abbf07 中的疏忽。每個 coverity。https://git.postgresql.org/pg/commitdiff/2b526ed2e1cbaa54e5ad0c12d1294482f2757b17
Michaël Paquier 推送
為 COPY 的進度報告添加一些基本測試。這測試了 COPY 進度報告的一些基本功能,依賴於在對檔案或 stdin 執行 COPY FROM 時觸發的 INSERT 觸發器,檢查大小、處理的元組數以及 WHERE 子句排除的元組數。作者:Josef Šimánek, Matthias van de Meent 審閱人:Michael Paquier, Justin Pryzby, Bharath Rupireddy, Tomas Vondra 討論:https://postgr.es/m/CAEze2WiOcgdH4aQA8NtZq-4dgvnJzp8PohdeKchPkhMY-jWZXA@mail.gmail.com https://git.postgresql.org/pg/commitdiff/15639d5e8f6f278219681fec8a5668a92fb7e874
修正 indexing.c 中的註解。578b229 移除了對 WITH OIDS 的支援,導致 CatalogTupleInsert() 不再回傳 Oid,但有個註解仍然提及了這點。作者:Vik Fearing 討論:https://postgr.es/m/fef01975-ed10-3601-7b9e-80ecef72d00b@postgresfriends.org https://git.postgresql.org/pg/commitdiff/9fd2952cf4920d563e9cea51634c5b364d57f71a
改善 psql 中使用 \h 時對 IMPORT FOREIGN SCHEMA 的 Tab 鍵自動完成功能。先前只有 "IMPORT" 顯示為自動完成的結果,但 IMPORT FOREIGN SCHEMA 才是唯一在首位使用此關鍵字的指令。此變更會將自動完成功能改為顯示完整的指令名稱,而非僅顯示 "IMPORT"。審閱者:Georgios Kokolatos, Julien Rouhaud 討論:https://postgr.es/m/YFL6JneBiuMWYyoh@paquier.xyz https://git.postgresql.org/pg/commitdiff/5b2266e33fc74142d23685bdf54f64ad598fbdea
Stephen Frost 推送
使用預先提取 (pre-fetching) 以加速 ANALYZE。當 posix_fadvise() 可用時,我們可以透過使用它來告知核心我們將要請求的區塊,從而顯著提高 ANALYZE 的效能。與 bitmap index scans 類似,預先提取的緩衝區數量基於 maintenance_io_concurrency 設定(針對特定的 tablespace,或者如果未設定,則透過 get_tablespace_maintenance_io_concurrency() 全域設定)。審閱者:Heikki Linnakangas, Tomas Vondra 討論:https://postgres.tw/message-id/VI1PR0701MB69603A433348EDCF783C6ECBF6EF0%40VI1PR0701MB6960.eurprd07.prod.outlook.com https://git.postgresql.org/pg/commitdiff/c6fc50cb40285141fad401321ae21becbaea1c59
改善 auto-vacuum 和 auto-analyze 的日誌記錄。在記錄 auto-vacuum 和 auto-analyze 活動時,如果啟用了 track_io_timing,則包含 I/O 計時。此外,對於 auto-analyze,新增讀取速率 (read rate) 和髒頁速率 (dirty rate),類似於歷史上為 auto-vacuum 記錄這些資訊的方式。Stephen Frost 和 Jakub Wartak 審閱者:Heikki Linnakangas, Tomas Vondra 討論:https://postgres.tw/message-id/VI1PR0701MB69603A433348EDCF783C6ECBF6EF0%40VI1PR0701MB6960.eurprd07.prod.outlook.com https://git.postgresql.org/pg/commitdiff/94d13d474dc61800e8a17cc1959c55815b050ecd
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 推送
文件:新增 pg_subscription 中 substream 的描述。Commit 464824323e 在 pg_subscription 中新增了一個新的欄位 substream,但忘記更新文件。報告者:Peter Smith 作者:Amit Kapila 審閱者:Peter Smith 討論:https://postgr.es/m/CAHut+PuPGGASnh2Dy37VYODKULVQo-5oE=Shc6gwtRizDt==cA@mail.gmail.com https://git.postgresql.org/pg/commitdiff/7efeb214ad832fa96ea950d0906b1d2b96316d15
修正 drop subscription 在處理 tablesync slots 時的競爭條件。Commit ce0fdbfe97 使 tablesync slots 成為永久性的,並允許 Drop Subscription 刪除這些 slots。但是,有可能在 tablesync worker 獲得 slot 建立的確認之前,drop subscription 就停止了它,這可能導致 publisher 上出現一個懸空的 slot。在 tablesync worker 中建立 slot 時,防止取消/終止中斷。報告者:Thomas Munro,根據 buildfarm 作者:Amit Kapila 審閱者:Vignesh C, Takamichi Osumi 討論:https://postgr.es/m/CA+hUKGJG9dWpw1cOQ2nzWU8PHjm=PTraB+KgE5648K9nTfwvxg@mail.gmail.com https://git.postgresql.org/pg/commitdiff/6b67d72b604cb913e39324b81b61ab194d94cba0
新增一個 GUC 和一個 reloption 以啟用平行模式下的插入操作。Commit 05c8482f7f 增加了針對 "INSERT INTO ... SELECT ..." 的平行 SELECT 實作,這可能會導致額外的平行安全檢查,進而產生不可忽略的效能開銷,即使最終這些檢查判斷無法使用平行處理。通常,這只會在目標資料表擁有大量分割區時才會成為問題。新增一個 GUC 選項 "enable_parallel_insert",以允許平行模式下的插入操作。預設值為開啟。除了 GUC 選項之外,使用者可能還需要一種機制,以便在資料表層級以更細的粒度允許平行模式下的插入操作。新的資料表選項 "parallel_insert_enabled" 允許這樣做。預設值為 true。作者: "Hou, Zhijie" 審閱者: Greg Nancarrow, Amit Langote, Takayuki Tsunakawa, Amit Kapila 討論: https://postgr.es/m/CAA4eK1K-cW7svLC2D7DHoGHxdAdg3P37BLgebqBOC2ZLc9a6QQ%40mail.gmail.com 討論: https://postgr.es/m/CAJcOf-cXnB5cnMKqWEp2E2z7Mvcd04iLVmV=qpFJrR3AcrTS3g@mail.gmail.com https://git.postgresql.org/pg/commitdiff/c8f78b616167bf8e24bc5dc69112c37755ed3058
文件:更新平行插入 reloption 的描述。Commit c8f78b6161 增加了一個新的 reloption 以啟用平行模式下的插入操作,但忘記在文件中的某個地方更新相關資訊。順便一提,修正了同一個 commit 中的一個錯字。回報者: Justin Pryzby 作者: Justin Pryzby 審閱者: "Hou, Zhijie", Amit Kapila 討論: https://postgr.es/m/20210318025228.GE11765@telsasoft.com https://git.postgresql.org/pg/commitdiff/ed62d3737c1b823f796d974060b1d0295a3dd831
Peter Eisentraut 推送
小幅改進錯誤訊息。https://git.postgresql.org/pg/commitdiff/e1ae40f381d0582981b1e63856bd4b060cfe2d53
將 lwlock-release probe 移回其應在的位置。該文件明確指出,lwlock-release 會在任何被釋放的等待者被喚醒之前觸發。直到 ab5194e6f617a9a9e7aadb3dd1cee948a42d0755 為止,它都是這樣工作的,但似乎在那裡被意外地放錯了位置。將其移回其應在的位置。作者: Craig Ringer craig.ringer@enterprisedb.com 討論: https://postgres.tw/message-id/CAGRY4nwxKUS_RvXFW-ugrZBYxPFFM5kjwKT5O+0+Stuga5b4+Q@mail.gmail.com https://git.postgresql.org/pg/commitdiff/96ae658e6238c5e69819fb1557c2c14a555506d8
Andres Freund 推送
Magnus Hagander 推送
Tomáš Vondra 推送
在後端崩潰後移除暫存檔。在使用暫存檔的後端崩潰後,這些檔案過去會被保留下來,因為它可能對除錯有用。但是我們沒有收到任何關於有人實際這樣做的報告,並且這意味著由於重複的後端故障,磁碟使用量可能會隨著時間的推移而增加(甚至可能達到 ENOSPC)。因此,這種行為有點不幸,而修復它需要手動清理(刪除檔案,這很容易出錯)或重新啟動實例(即服務中斷)。這實現了自動清理暫存檔,並由新的 GUC remove_temp_files_after_crash 控制。預設情況下,檔案會被移除,但可以停用它以在需要時恢復舊的行為。作者: Euler Taveira 審閱者: Tomas Vondra, Michael Paquier, Anastasia Lubennikova, Thomas Munro 討論: https://postgr.es/m/CAH503wDKdYzyq7U-QJqGn%3DGm6XmoK%2B6_6xTJ-Yn5WSvoHLY1Ww%40mail.gmail.com https://git.postgresql.org/pg/commitdiff/cd91de0d17952b5763466cfa663e98318f26d357
實作 GROUP BY DISTINCT。使用 grouping sets 時,有些 grouping sets 可能是重複的。這在使用 CUBE 和 ROLLUP 子句時尤其常見。例如,GROUP BY CUBE (a,b), CUBE (b,c) 等同於 GROUP BY GROUPING SETS ( (a, b, c), (a, b, c), (a, b, c), (a, b), (a, b), (a, b), (a), (a), (a), (c, a), (c, a), (c, a), (c), (b, c), (b), () )。某些 grouping sets 會被多次計算,這大部分是不必要的。此 commit 實現了新的 GROUP BY DISTINCT 功能(如 SQL 標準中所定義),該功能消除了重複的集合。作者: Vik Fearing 審閱者: Erik Rijkers, Georgios Kokolatos, Tomas Vondra 討論: https://postgr.es/m/bf3805a8-d7d1-ae61-fece-761b7ff41ecc@postgresfriends.org https://git.postgresql.org/pg/commitdiff/be45be9c33a85e72cdaeb9967e9f6d2d00199e09
修復 remove_temp_files_after_crash 的 TAP 測試。cd91de0d17 中包含的測試有兩個簡單的缺陷。首先,行數較低,並且在某些平台上(例如 32 位),排序不需要磁碟上的排序,因此在這些機器上它沒有測試自動移除。但是,該測試失敗了,因為沒有任何暫存檔,甚至沒有建立 base/pgsql_tmp 目錄。透過將 rowcount 增加到 5000 修正了此問題,這在任何平台上都應該足夠高。其次,該測試使用簡單的睡眠來等待暫存檔的建立。這顯然是有問題的,因為在速度較慢的機器上(或使用 valgrind、CLOBBER_CACHE_ALWAYS 等),建立暫存檔可能需要一段時間。但是,我們也希望測試能夠以合理的速度執行。透過改為依賴 UNIQUE 約束來修正此問題,該約束會阻止建立暫存檔的查詢。作者: Euler Taveira 審閱者: Tomas Vondra 討論: https://postgr.es/m/CAH503wDKdYzyq7U-QJqGn%3DGm6XmoK%2B6_6xTJ-Yn5WSvoHLY1Ww%40mail.gmail.com https://git.postgresql.org/pg/commitdiff/a16b2b960f0eec2fe367e86017b3c24ed688ba2b
修復 remove_temp_files_after_crash TAP 測試中的競爭條件。TAP 測試的編寫方式使其沒有等待正確的 SQL 命令,而是等待前面命令的輸出。這導致了競爭條件,允許命令以不同的順序運行,沒有按預期阻止等等。這透過在可能的情況下反轉命令的順序來修正此問題,以便觀察輸出可以保證資料已正確插入,並等待鎖定出現在 pg_locks 中。討論: https://postgr.es/m/CAH503wDKdYzyq7U-QJqGn%3DGm6XmoK%2B6_6xTJ-Yn5WSvoHLY1Ww%40mail.gmail.com https://git.postgresql.org/pg/commitdiff/e589c4890b05044a04207c2797e7c8af6693ea5f
在 cmp_list_len_contents_asc 中使用 lfirst_int。在 be45be9c33 中新增的函數正在按長度和內容比較整數列表 (IntList),但是存在兩個錯誤。首先,它使用 intVal() 來提取值,但這是用於 Value 節點,而不是用於從 IntList 提取 int 值。其次,它直接在 ListCell 上呼叫它,而沒有執行 lfirst()。所以只需改為執行 lfirst_int()。有趣的是,這並沒有在建置農場中造成任何崩潰,但是 valgrind 正確地抱怨了它。討論: https://postgr.es/m/bf3805a8-d7d1-ae61-fece-761b7ff41ecc@postgresfriends.org https://git.postgresql.org/pg/commitdiff/b822ae13ea93c18326d58d47829bbc66d36fae5c
在 brin_form_tuple 中使用有效的壓縮方法。當壓縮 BRIN 摘要時,我們不能簡單地使用索引屬性的壓縮方法。摘要可能使用不同的資料類型,例如,固定長度的屬性可能具有 varlena 摘要,導致壓縮失敗。對於內建的 BRIN 操作類別,這剛好可以運作,因為摘要使用與屬性相同的資料類型。當資料類型匹配時,我們可以繼承使用為屬性指定的壓縮方法(它被複製到索引描述符中)。否則,我們沒有太多選擇,只能使用預設的壓縮方法。作者:Tomas Vondra 審閱者:Justin Pryzby pryzby@telsasoft.com 討論:https://postgr.es/m/e0367f27-392c-321a-7411-a58e1a7e4817%40enterprisedb.com https://git.postgresql.org/pg/commitdiff/882b2cdc08c4100e273f24742e2118be98708a07
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 送出另一個修正檔,以實作內建的連線池。