https://archives.postgresql.org/pgsql-jobs/2021-11/
Nordic PGDay 2022 將於 2022 年 3 月 22 日在芬蘭赫爾辛基的 Hilton Helsinki Strand Hotel 舉行。徵稿截止日期為 2021 年 12 月 31 日,詳情請見此處
Planet PostgreSQL: https://planet.postgresql.org/
PostgreSQL 每週新聞由 David Fetter 本週為您帶來
請在太平洋標準時間 (PST8PDT) 週日下午 3:00 前將新聞和公告提交至 david@fetter.org。
Peter Geoghegan 推送了
移除 lazy_scan_heap 並行 VACUUM 註解區塊。 這不屬於 lazy_scan_heap 執行的任務之非常高層級的討論。 在 vacuumlazy.c 的頂部已經有一個類似的、更長的註解區塊,直接提到 lazy_scan_heap。 https://git.postgresql.org/pg/commitdiff/97f5aef609ce51422934b7dbdba599a7de4dbafd
回到考慮標記為 full 的頁面上的 HOT。 Commit 2fd8685e7f 簡化了 heap_update() 內發生的已修改屬性的檢查。 這包括一個微優化,影響標記為 PD_PAGE_FULL 的頁面:甚至不要嘗試使用 HOT 來節省一些週期來確定 HOT 安全性。 假設是這次不會成功,因為上次沒有成功。 刪除微優化。 它只能節省 heap_update() 的絕大多數呼叫所消耗的週期,這似乎不值得增加複雜性。 同時,在短期內,儘管平均可以節省一些週期,但隨著時間的推移,透過重複應用微優化,某些工作負載可能會變得更糟。 作者:Peter Geoghegan pg@bowt.ie 審閱者:Álvaro Herrera alvherre@alvh.no-ip.org 討論:https://postgr.es/m/CAH2-WznU1L3+DMPr1F7o2eJBT7=3bAJoY6ZkWABAxNt+-afyTA@mail.gmail.com https://git.postgresql.org/pg/commitdiff/1a6f5a0e876306293fda697e7820b404d5b93693
更新高層級 vacuumlazy.c 註解。 更新 vacuumlazy.c 檔案標頭註解(以及 lazy_scan_heap 函數上方的註解),這些註解主要是在引入 HOT 優化之前編寫的,當時 lazy_scan_heap 做的事情少得多,並且實際上並沒有在初始堆疊掃描期間進行修剪。 由於 lazy_scan_heap 現在將更多工作外包給較低層級的函數,因此最好透過談論高層級不變量來引入該函數,該不變量決定了每個階段發生的順序。 同時,淡化我們記憶體不足以處理 TID 的情況,因為延遲該討論可以更容易地討論核心重要性問題。 最後,從標頭註解中刪除並行 VACUUM 的討論。 這些並沒有增加太多,而且位置不正確。 https://git.postgresql.org/pg/commitdiff/12b5ade9023f3ecaddcbc423a22dc284c91c79f6
vacuumlazy.c:首選術語「清理鎖」。術語「超級獨佔鎖」是「清理鎖」的可接受同義詞。即便如此,在同一個檔案中從一個術語切換到另一個術語也會令人困惑。在 vacuumlazy.c 中標準化為「清理鎖」。根據 Andres Freund 的投訴。 https://git.postgresql.org/pg/commitdiff/276db875d4f9be2911582f367596d444d6986c77
Fujii Masao 推送了
Peter Eisentraut 推送了
將 ABI 額外欄位新增至 fmgr magic block。 這允許衍生產品有意使其 fmgr ABI 不相容,並顯示明確的錯誤訊息。 討論:https://postgres.tw/message-id/flat/55215fda-db31-a045-d6b7-d6f2d2dc9920%40enterprisedb.com https://git.postgresql.org/pg/commitdiff/d6d1dfcc99e3dd6e70e2a7024924e491bb7a9670
修正不正確的格式預留位置。 另外,為基礎變數選擇更好的類型,使其更加一致。 https://git.postgresql.org/pg/commitdiff/fb5961fd13b1262df280e400645bdf4ed192f058
移除不需要的 Python 包含項目。 自 Python 2.4 以來,包含 <compile.h> 和 <eval.h> 已不再必要,因為它們已透過 <Python.h> 包含。 此外,<eval.h> 將在 Python 3.11 中移除。 因此,移除這些包含項目。 審閱者:Tom Lane tgl@sss.pgh.pa.us 討論:https://postgres.tw/message-id/flat/84884.1637723223%40sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/99e4d24a9d77e7bb87e15b318e96dc36651a7da2
更新註解。 各個地方都想指出元組描述符不包含 pg_attribute 的可變長度欄位。 這從新增 attacl 時開始,但此後新增了更多欄位,並且這些註解尚未持續更新。 重新措辭,使目的更清晰,並且我們不必不斷更新它們。 https://git.postgresql.org/pg/commitdiff/36cb5e7c512bef394c9288786c62ef0eb1e891ba
Álvaro Herrera 推送了
在註解中新增遺漏的單字。 由 Zhihong Yu 報告。 討論:https://postgr.es/m/CALNJ-vR6uZivg_XkB1zKjEXeyZDEgoYanFXB-++1kBT9yZQoUw@mail.gmail.com https://git.postgresql.org/pg/commitdiff/67385544ce672a9a53cfd51b39c1ff9048d65585
autovacuum:改進幾處措辭。自動清理程式碼中的一些字串(一個 WARNING 和一些記憶體上下文名稱)在編寫時,「worker」除了「autovacuum worker」之外沒有其他可能的含義,但那已經是很久以前的事了。使其更具體。此外,將 WARNING 從 elog() 更改為 ereport(),以增加可翻譯性。作者:Bharath Rupireddy bharath.rupireddyforpostgres@gmail.com 審閱人:Nathan Bossart bossartn@amazon.com 審閱人:Justin Pryzby pryzby@telsasoft.com 審閱人:Kyotaro Horiguchi horikyota.ntt@gmail.com 審閱人:Dilip Kumar dilipbalaut@gmail.com 審閱人:Masahiko Sawada sawada.mshk@gmail.com 討論:https://postgr.es/m/CALj2ACX2UHp76dqdoZq92a7v4APFuV5wJQ+AUrb+2HURrKN=NQ@mail.gmail.com https://git.postgresql.org/pg/commitdiff/042412879e35791a65509f2786b4954a273466e5
更明確地說明 XLogReaderAllocate 中的 OOM。有些地方可以從新增的 errdetail() 中受益,這與我們在其他地方已經做的事情相符;而那些無法承受 errdetail() 的地方可以獲得更具描述性的主要訊息。作者:Bharath Rupireddy bharath.rupireddyforpostgres@gmail.com 審閱人:Daniel Gustafsson daniel@yesql.se 審閱人:Julien Rouhaud rjuju123@gmail.com 討論:https://postgr.es/m/CALj2ACV+cX1eM03GfcA=ZMLXh5fSn1X1auJLz3yuS1duPSb9QA@mail.gmail.com https://git.postgresql.org/pg/commitdiff/2fed48f48f7f2f7a6d6f6d020f046efe3c249828
修正 OVERWRITTEN_CONTRECORD 中損壞的 LSN 的判斷。在 commit ff9f111bce24 中,當前一個紀錄正好在頁面邊界結束時,我混淆了頁面中第一個紀錄的 LSN 的不一致定義。正確的 LSN 已調整為跳過 WAL 頁面標頭;我在設定 XLogReaderState->overwrittenRecPtr 時未能使用它,因此在 WAL 重播時,VerifyOverwriteContrecord 會拒絕讓重播繼續超過該紀錄。回溯修補至 10。9.6 也包含此錯誤,但不再維護。討論:https://postgr.es/m/45597.1637694259@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/44bd3ed332d6ad3207f38b3b6deb6083f0baddf5
記錄 max_slot_wal_keep_size 的單位。該文件簡介未能提及單位,並且缺乏關於可變更性的說明。回溯修補至 13。審閱人:Kyotaro Horiguchi horikyota.ntt@gmail.com 報告人:b1000101@pm.me 討論:https://postgr.es/m/163760291192.26193.10801700492025355788@wrigleys.postgresql.org https://git.postgresql.org/pg/commitdiff/013bb6c8c0b5b0ac7948d7126685008505b3aa58
潤飾 vacuuumdb --analyze-in-stages 文件簡介。我犯了一些錯字,Nikolai Berkoff 提出了一個措辭更改建議。討論:https://postgr.es/m/VMwe7-sGegrQPQ7fJjSCdsEbESKeJFOb6G4DFxxNrf45I7DzHio7sNUH88wWRMnAy5a5G0-FB31dxPM47ldigW6WdiCPncHgqO9bNl6F240=@pm.me https://git.postgresql.org/pg/commitdiff/dd484c97f55be8336fcb41470768c5b8ae347d13
強化 be-gssapi-common.h 以進行標頭檢查。將內容包圍在一個測試中,以確定該功能是否已通過 configure 啟用,以使沒有安裝 GSSAPI 的系統上的標頭檢查工具靜音。回溯修補至 12,該文件出現在此版本中。討論:https://postgr.es/m/202111161709.u3pbx5lxdimt@alvherre.pgsql https://git.postgresql.org/pg/commitdiff/f744519326e1ce4774d0966f7848601a8327eeaa
Tom Lane 推送
在檢查 TAP 測試所需的模組時,探測 $PROVE 而不是 $PERL。通常,「prove」和「perl」來自相同的 Perl 安裝,但我們支援它們不來自相同安裝的情況(主要是因為 MSys buildfarm 動物需要這個)。在這種情況下,AX_PROG_PERL_MODULES 完全是錯誤的使用方式,因為它檢查的是「perl」擁有的東西。相反,建立一個包含所需模組的 TAP 測試腳本,並在「prove」下執行它。此變更後,我們根本不需要 ax_prog_perl_modules.m4,因此將其刪除。為了 buildfarm 的利益,回溯修補至所有支援的分支。(在 v10 中,這也回溯修補了 commit 264eb03aa 的影響。) Andrew Dunstan 和 Tom Lane,根據 Noah Misch 的觀察。討論:https://postgr.es/m/E1moZHS-0002Cu-Ei@gemulon.postgresql.org https://git.postgresql.org/pg/commitdiff/c4fe3199a6d65212537a59eb0d7e6fad22b9e903
修正 pg_dump --inserts 模式,用於具有已刪除欄位的產生欄位。如果一個表包含一個由已刪除欄位先前的產生欄位,則 dumpTableData_insert 未能考慮已刪除的欄位,並且會在錯誤的欄位中發出 DEFAULT 佔位符。這導致在還原時失敗。預設的 COPY 程式碼路徑沒有這個錯誤,可能解釋了為什麼沒有早點注意到它。在我們修復此問題時,我們可以對這種情況更聰明一些:(1)避免不必要地獲取產生欄位的值,(2)如果我們使用 --column-inserts,也從輸出中省略產生欄位。雖然預計這些模式不像 COPY 路徑那樣具有高效能,但我們不妨盡可能地提高效率;它不會增加太多的複雜性。根據 Дмитрий Иванов 的報告。回溯修補至 v12,產生欄位出現在此版本中。討論:https://postgr.es/m/CAPL5KHrkBniyQt5e1rafm5DdXvbgiiqfEQEJ9GjtVzN71Jj5pA@mail.gmail.com https://git.postgresql.org/pg/commitdiff/0b126c6a4b00972f2f3533e1718bbe297e2851c2
安撫 perlcritic。根據 buildfarm。 https://git.postgresql.org/pg/commitdiff/db3a660c6327a6df81a55c4aa86e6c0837ecd505
調整 pg_dump 中轉換 (cast) 的優先順序。當儲存的表達式 (stored expression) 依賴於使用者定義的轉換時,後端會將依賴性記錄為依賴於轉換的實作函數 --- 或者,如果沒有涉及轉換函數,只是 RelabelType 或 CoerceViaIO,則根本不記錄任何依賴性。這對於 pg_dump 來說是有問題的,因為它可能會以錯誤的順序傾印 (dump) 內容,導致還原失敗。鑑於先前沒有相關報告,這種風險並不是很高,但如果轉換用於某個視圖 (view) 中,而該視圖的列類型 (rowtype) 隨後被用作另一個函數的輸入或結果類型,則可以證明這一點。(這會導致視圖被提升到傾印的函數部分,位於轉換之前。)一個邏輯上萬無一失的解決方案是將轉換的 OID 包含在表達式的解析形式中,然後 dependency.c 可以提取它,並且儲存的依賴性會強制 pg_dump 執行正確的操作。這樣的變更會相當具有侵入性,而且肯定無法回溯修補 (back-patch)。此外,由於我們希望使用轉換語法的表達式與通過顯式函數調用執行相同操作的表達式 equal(),因此轉換 OID 欄位必須具有特殊的、比較時被忽略的語義,從而使事情變得混亂。因此,我們改用 pg_dump 中的一個非常簡單的技巧來解決這個問題:更改物件類型優先順序,以便在類型之後立即對轉換進行初始排序,排序在函數之前。這以相當直接的方式解決了沒有實作函數的轉換的問題。對於那些有實作函數的轉換,實作函數將通過依賴性排序步驟提升到轉換之前,以便我們仍然具有有效的傾印順序。(我不確定這是否能完全保證沒有問題;但由於多年來一直如此,沒有任何先前的報告,因此這可能足以在實踐中解決它。)根據 Дмитрий Иванов 的報告。回溯修補到所有支援的分支。討論:https://postgr.es/m/CAPL5KHoGa3uvyKp6z6m48LwCnTsK+LRQ_mcA4uKGfqAVSEjV_A@mail.gmail.com https://git.postgresql.org/pg/commitdiff/b55f2b6926556115155930c4b2d006c173f45e65
Doc: 改善關於 nextval()/setval() 的文件。澄清 nextval 和 setval 的結果在呼叫交易 (transaction) 提交之前,不能保證是持久性的。有些人似乎從這些函數永遠不會回滾的聲明中得出相反的結論,因此重新措辭以避免以這種方式說明。討論:https://postgr.es/m/CAKU4AWohO=NfM-4KiZWvdc+z3c1C9FrUBR6xnReFJ6sfy0i=Lw@mail.gmail.com https://git.postgresql.org/pg/commitdiff/4ac452e2285da347c75f5960ae211e183a87b57b
Michaël Paquier 推送了
新增 SQL 函數來監控複寫槽 (replication slot) 的目錄內容。此提交新增了一組能夠查看與複寫槽相關的各種路徑內容的函數:- pg_ls_logicalsnapdir,適用於 pg_logical/snapshots/ - pg_ls_logicalmapdir,適用於 pg_logical/mappings/ - pg_ls_replslotdir,適用於 pg_replslot/<slot_name>/ 這些函數旨在供監控工具使用。與 pg_ls_dir() 不同,可以將執行權限授予非超級使用者。pg_monitor 角色的成員有權存取這些函數。提高目錄版本。作者:Bharath Rupireddy 審閱者:Nathan Bossart, Justin Pryzby 討論:https://postgr.es/m/CALj2ACWsfizZjMN6bzzdxOk1ADQQeSw8HhEjhmVXn_Pu+7VzLw@mail.gmail.com https://git.postgresql.org/pg/commitdiff/1922d7c6e1a74178bd2f1d5aa5a6ab921b3fcd34
在建置腳本中新增對 Visual Studio 2022 的支援。更新文件和任何與 VS 相關的程式碼路徑,以保持整體一致性。與 2017 和 2019 類似,我們用於確定使用哪個程式碼路徑進行建置的 VS 版本和 nmake 版本仍然以它們自己的方式不一致。回溯修補到 10,以便 buildfarm 成員能夠在所有支援的穩定分支上使用這個新版本的 Visual Studio。作者:Hans Buschmann 討論:https://postgr.es/m/1633101364685.39218@nidsa.net Backpatch-through: 10 https://git.postgresql.org/pg/commitdiff/b2265d305d81b0c1a2cec6c5b66a190a9e69e853
移除寫入檔案標頭時,發生錯誤時無用的 LZ4 系統呼叫。如果在寫入 LZ4 檔案標頭時發生錯誤,則會在 write() 的錯誤程式碼路徑中呼叫 LZ4F_compressEnd(),然後呼叫 LZ4F_freeCompressionContext() 以完成清理。現有的程式碼沒有損壞,但 LZ4F_compressEnd() 被證明是不必要的,因為在此階段沒有要刷新的內容,因此將其刪除。根據 Jeevan Ladhe 和 Robert Haas 的抱怨。討論:https://postgr.es/m/CAOgcT0PE33wbD7giAT1OSkNJt=p-vu8huq++qh=ny9O=SCP5aA@mail.gmail.com https://git.postgresql.org/pg/commitdiff/f79962d8264b8d205ce45a8aa11d1b37f9592a81
修正 Windows 上標準流 (stream) 的 fstat() 模擬。win32stat.c 中的 fstat() 模擬導致現有核心內呼叫者出現兩個問題,當使用流作為參數時會失敗並顯示 EINVAL:- psql 的 \copy 在使用流時會崩潰。- pg_recvlogical 會因為 -f - 而失敗。主測試套件中的 copyselect.sql 中的測試涵蓋了第一種情況,並且第二種情況有一個 TAP 測試。但是,在這兩種情況下,由於標準流總是重新導向,因此自動化測試沒有注意到這些問題,需要 Windows 上的終端才能重現。這個問題是在 bed9075 中引入的,問題的根源在於 GetFileInformationByHandle() 無法直接在流上工作,因此這個提交新增了一個額外的程式碼路徑來模擬並傳回一組最符合現實的統計資料。請注意,重新導向的流依賴於可以使用 GetFileInformationByHandle() 查詢的句柄,但我們可以依靠 GetFinalPathNameByHandleA() 來檢測這種情況。作者:Dmitry Koval, Juan José Santamaría Flecha 討論:https://postgr.es/m/17288-6b58a91025a8a8a3@postgresql.org Backpatch-through: 14 https://git.postgresql.org/pg/commitdiff/10260c794b211117a56ee2eb2deacf609bcca25f
阻止 ALTER TABLE .. DROP NOT NULL 用於副本身份索引中的欄位。直接依賴於索引的副本身份依賴於一組屬性,其中之一是此索引中定義的所有欄位都必須標記為 NOT NULL。ALTER TABLE DROP NOT NULL 的邏輯中存在一個漏洞,可以移除用作副本身份的索引部分的欄位的 NOT NULL 屬性,因此阻止它以避免將來的邏輯解碼出現問題。對於主鍵的一部分的欄位,已經進行了相同的檢查,因此修復很簡單。作者:Haiying Tang, Hou Zhijie 審閱者:Dilip Kumar, Michael Paquier 討論:https://postgr.es/m/OS0PR01MB6113338C102BEE8B2FFC5BD9FB619@OS0PR01MB6113.jpnprd01.prod.outlook.com Backpatch-through: 10 https://git.postgresql.org/pg/commitdiff/f0d43947a1b0c30f0bf2c117cd78bf95a3161268
David Rowley 推送了
允許 Memoize 以二進位比較模式運作。Memoize 原本總是使用雜湊相等運算子來比較快取鍵類型,以判斷目前的參數集合是否與先前快取的集合相同。某些類型,例如浮點數,其中 -0.0 和 +0.0 在二進位表示法中不同,但被雜湊相等運算子歸類為相等,可能會導致問題,因為除非 join 使用相同的運算子,否則 join 運算子可能能夠區分這兩個值。在這種情況下,我們可能會意外地從快取中傳回不正確的列。為了修正這個問題,我們在這裡為 Memoize 添加了一種二進位模式,允許它透過逐位比較而不是使用雜湊相等運算子的邏輯方式來比較目前參數集合與先前快取的值。這種二進位模式總是用於 LATERAL joins,並且當任何 join 運算子不可雜湊時,它也用於正常的 joins。報告者:Tom Lane 作者:David Rowley 討論:https://postgr.es/m/3004308.1632952496@sss.pgh.pa.us 回溯修補:14,即 Memoize 加入的版本 https://git.postgresql.org/pg/commitdiff/e502150f7d0be41e3c8784be007fa871a32d8a7f
當非鍵參數變更時,清除 Memoize 快取。Memoize 節點下的子計畫可能包含來自 Memoize 節點上方的參數。如果此參數變更,則由於新的參數值,快取項目可能會過時。先前 Memoize 錯誤地沒有意識到這一點。我們在這裡透過在每次非快取鍵的一部分的參數變更時清除快取來修正這個問題。錯誤:#17213 報告者:Elvis Pranskevichus 作者:David Rowley 討論:https://postgr.es/m/17213-988ed34b225a2862@postgresql.org 回溯修補:14,即 Memoize 加入的版本 https://git.postgresql.org/pg/commitdiff/1050048a315790a505465bfcceb26eaf8dbc7e2e
還原「當非鍵參數變更時,清除 Memoize 快取」。這會還原 commit 1050048a315790a505465bfcceb26eaf8dbc7e2e。https://git.postgresql.org/pg/commitdiff/dad20ad4709f602b4827a1ab2b0e715f36c548c3
當非鍵參數變更時,清除 Memoize 快取,第二次嘗試。Memoize 節點下的子計畫可能包含來自 Memoize 節點上方的參數。如果此參數變更,則由於新的參數值,快取項目可能會過時。先前 Memoize 錯誤地沒有意識到這一點。我們在這裡透過在每次非快取鍵的一部分的參數變更時清除快取來修正這個問題。錯誤:#17213 報告者:Elvis Pranskevichus 作者:David Rowley 討論:https://postgr.es/m/17213-988ed34b225a2862@postgresql.org 回溯修補:14,即 Memoize 加入的版本 https://git.postgresql.org/pg/commitdiff/411137a429210e432f923264a8e313a9872910ca
Amit Kapila 推送
SnapBuild*
巨集。SnapBuildOnDiskNotChecksummedSize 和 SnapBuildOnDiskChecksummedSize 的相同巨集名稱正在 slot.c 和 snapbuild.c 中使用。此修補程式將 slot.c 中的這些巨集重新命名為 ReplicationSlotOnDiskNotChecksummedSize 和 ReplicationSlotOnDiskChecksummedSize,類似於其他巨集。這使得所有巨集名稱在 slot.c 中看起來一致。作者:Bharath Rupireddy 討論:https://postgr.es/m/CALj2ACVZo-piDGzBOJRY4ob=_goFR6t9DhZMDMjJWN7LQs34Aw@mail.gmail.com
https://git.postgresql.org/pg/commitdiff/875e02c2dff34f1bc9f3832a4f83c34bf300eb9fRobert Haas 推送
修正在檢測到不正確的時間軸切換時的邊緣情況故障。rescanLatestTimeLine() 包含一個防護措施,以防止切換到在當前恢復點之前從當前時間軸分叉出來的時間軸,但如果時間軸切換發生在讀取第一個 WAL 記錄(必須是檢查點記錄)之前,則該防護措施不起作用。如果沒有此修補程式,在這種情況下,可能會發生不正確的時間軸切換。發生這種情況的原因是 rescanLatestTimeLine() 依賴於全域變數 EndRecPtr 來了解 WAL 重播的目前位置。但是,此時程式碼中的 EndRecPtr 包含上次重播記錄的端點,而不是現在重播記錄的起點或端點。因此,在重播任何記錄之前,它為零,這會導致健全性檢查始終通過。為了修復,請明確傳遞正確的時間軸。我們想要的 EndRecPtr 值來自 xlogreader,它將是我們將要嘗試讀取的記錄的起始位置,而不是全域變數,它是我們成功讀取的最後一條記錄的結束位置。它們通常相同,但在這裡描述的邊緣情況下則不然。沒有回溯修補,因為在 v14 及更早版本中,我們在這裡使用的 TLI 也是錯誤的,LSN 也是錯誤的。在 master 中,這已由 commit 4a92a1c3d1c361ffb031ed05bf65b801241d7cdd 修復,但它及其先決條件修補程式對於如此小問題而言,侵入性太強而無法進行回溯修補。我提供的修補程式,Amul Sul 審閱。討論:http://postgr.es/m/CA+Tgmoao96EuNeSPd+hspRKcsCddu=b1h-QNRuKfY8VmfNQdfg@mail.gmail.com https://git.postgresql.org/pg/commitdiff/e7ea2fa342b008ae97e794b0fa2ee538ddcee3b7
xlog.c:移除全域變數 ReadRecPtr 和 EndRecPtr。在大多數情況下,變數必須儲存與我們在 WAL 重播期間使用的 XLogReaderState 的同名成員相同的值,因為 ReadRecord() 在 XLogReadRecord() 傳回後立即將這些值從結構成員指派給全域變數。但是,XLogBeginRead() 會調整結構成員,但不會調整全域變數,因此在 XLogBeginRead() 之後和 XLogReadRecord() 完成之前,這些值可能會有所不同。否則,它們必須相同。根據我的分析,唯一在可能與結構成員的值不相同的位置引用任一變數的地方是 XLogPageRead 內的 EndRecPtr 引用。因此,在我們使用全域變數的每個其他位置,我們可以改為切換到使用結構成員,並移除全域變數。但是,我們可以並且實際上應該在 XLogPageRead() 中也執行此操作,因為在程式碼中的該點,全域變數實際上將儲存我們要讀取的記錄的開始位置 - 要么是因為它是最後一個 WAL 記錄結束的位置,要么是因為自上次讀取記錄以來,已使用 XLogBeginRead 變更了讀取位置。另一方面,結構成員已經更新為指向我們剛讀取的記錄的結尾。在其他地方,後者是我們用作 emode_for_corrupt_record() 的參數,所以我們應該在這裡也這樣做。此修補程式的這部分可能是一個錯誤修復,但我認為它沒有任何重要的後果,因此沒有回溯修補。這裡的重點只是繼續減少 xlog.c 中完全過度使用全域變數的情況。討論:http://postgr.es/m/CA+Tgmoao96EuNeSPd+hspRKcsCddu=b1h-QNRuKfY8VmfNQdfg@mail.gmail.com https://git.postgresql.org/pg/commitdiff/d2ddfa681db27a138acb63c8defa8cc6fa588922
Heikki Linnakangas 推送
Andres Freund 推送
Daniel Gustafsson 推送
修正 REVOKE ROLE 語句中 GRANTED BY 支援的問題。Commit 6aaaa76bb 在 GRANT 和 REVOKE 語句中增加了對 GRANTED BY 子句的支援,但遺漏了在 REVOKE ROLE 情況下檢查角色的支援。透過檢查解析的角色是否符合 CURRENT_ROLE/CURRENT_USER 的要求來修正此問題,並新增一些測試。回溯修補至 v14,該版本引入了 GRANTED BY 支援。討論:https://postgr.es/m/B7F6699A-A984-4943-B9BF-CEB84C003527@yesql.se 回溯修補:14 https://git.postgresql.org/pg/commitdiff/b2a459edfe645747744402f23de041e9c0a3cd93
新增 REVOKE ADMIN OPTION 的測試。REVOKE ADMIN OPTION FOR <role_name> 語法沒有足夠的測試覆蓋率。透過在權限測試套件中新增覆蓋率來修正此問題。作者:Mark Dilger mark.dilger@enterprisedb.com 討論:https://postgr.es/m/333B0203-D19B-4335-AE64-90EB0FAF46F0@enterprisedb.com https://git.postgresql.org/pg/commitdiff/4597fd78d6dea2235cb948ea036c2d61057c415c