pgMustard 4,一個用於「explain analyze」的使用者介面,提供效能提示,已發布。
psycopg2 2.9.0,一個用於 PostgreSQL 的 Python 連接器,已發布。
pgAdmin4 5.4,一個用於 PostgreSQL 的 Web 和原生 GUI 控制中心,已發布。
Planet PostgreSQL: Planet
PostgreSQL 每週新聞由 David Fetter 本週為您帶來
請在太平洋標準時間(PST8PDT)星期日下午 3:00 前將新聞和公告提交至 david@fetter.org。
Tom Lane 推送了
解決較新版本的 mktime() 的移植性問題。 近期的 glibc 版本使得 mktime() 在 tm_isdst 與現行時區不一致時會失敗;特別是當時區為 UTC 時,tm_isdst = 1 會失敗。(在我看來,這與 POSIX 授權的對 struct tm 其他欄位中「不正確」值的處理方式極為不一致,所以我認為這是一個錯誤,但我敢肯定他們會說這是故意的。) 已觀察到這會在 pg_restore 還原在不同時區建立的封存檔時導致外觀問題。 要修正此問題,請使用封存檔中的欄位值執行 mktime(),如果失敗,請再次嘗試 tm_isdst = -1。 這將給出一個與原始時區的 UTC 偏移量不同的結果,但以前也是如此。 這不是很重要,因為我們除了可能列印它之外,不會對結果做任何事情。 (有一天我們應該清除所有這些邏輯,並在封存檔中記錄標準格式的時間戳記。 但這對於向後移植的錯誤修復來說是可以的。) 此外,保護我們對 mktime() 的另一個使用,讓 initdb 的 build_time_t() 設定 tm_isdst = -1 而不是 0。 這種情況只可能在全年都是 DST 的時區中出現問題;但我認為有些確實存在,或者未來可能會存在。 根據 Wells Oliver 的報告。 向後移植到所有支援的版本,因為它們中的任何一個都可能需要使用較新的 glibc 執行。 討論:https://postgr.es/m/CAOC+FBWDhDHO7G-i1_n_hjRzCnUeFO+H-Czi1y10mFhRWpBrew@mail.gmail.com https://git.postgresql.org/pg/commitdiff/f807e3410fdfc29ced6590c7c2afa76637e001ad
移除孤立的預期結果檔案。 這應該已在 43e084197 中移除,該檔案移除了相應的 spec 檔案。 在使用 isolationtester 進行測試時注意到。 https://git.postgresql.org/pg/commitdiff/ffbe9dec13599fa786ea6567df1c6a3f3ee3c673
更新變體預期結果檔案。 這應該已在 d2d8a229b 中更新,但被忽略了。 根據 31a877f18 添加此檔案的說明,此檔案旨在顯示在 default_transaction_isolation = serializable 下獲得的結果。 我們在其他隔離測試中基本上已經忘記了這個目標,但只要我們有這個,它就應該是正確的。 在使用 isolationtester 進行測試時注意到。 https://git.postgresql.org/pg/commitdiff/0a1e80c5c4f094087257fc4284a87e0bc7bca591
移除另一個孤立的預期結果檔案。 當在 commit 0ac5ad513 中新增時,顯然需要 aborted-keyrevoke_2.out 來處理可序列化交易模式的情況。 但是,可序列化模式下的輸出實際上與常規的 aborted-keyrevoke.out 檔案相符,並且據我所知已經存在很長時間了。 沒有必要繼續拖著這個變體。 https://git.postgresql.org/pg/commitdiff/f6352a0d4e437ac8bc266f77df22d064592056c9
更新另一個變體預期結果檔案。 這應該已在 533e9c6b0 中更新,但被忽略了。 鑑於沒有任何抱怨,我不會費心向後移植。 https://git.postgresql.org/pg/commitdiff/d3c878499c9d639ff06e0664d06b8c731e30c2fc
改進一些與複寫相關的程式碼中的 SQLSTATE 報告。 我最初的目標是在 walrcv_connect() 失敗時報告 ERRCODE_CONNECTION_FAILURE,但在我四處查看後,我意識到編寫此程式碼的人認為 errcode 純粹是可選的。 這不是我對我們專案政策的理解。 因此,請確保在每個 ereport 中提供一個 errcode,該 ereport (a) 為 ERROR 或更高等級,且 (b) 不能說是內部邏輯錯誤。 此外,修正一些非常可疑的現有 errcode 指派。 雖然這不符合政策,但它在很大程度上也是表面上的,因為很少有這些情況可以報告給應用程式。 所以我不覺得需要向後移植。 討論:https://postgr.es/m/2189704.1623512522@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/6b787d9e32005867ee3660d1ea20f447810a403d
修正 ExecuteQuery 中錯誤後的 plancache 參考計數洩漏。 將 plancache 中的計劃塞入 Portal 時,不應該冒著在 GetCachedPlan 和 PortalDefineQuery 之間引發錯誤的風險; 如果發生這種情況,GetCachedPlan 遞增的計劃參考計數將洩漏。 我在 9dbf2b7d7 中重構程式碼時設法打破了這個規則。 除了某些記憶體洩漏之外,沒有可見的後果,而且由於沒有人很可能連續多次觸發相關的錯誤條件,因此我們沒有注意到並不奇怪。 儘管如此,這是一個錯誤,因此重新排列操作順序以消除危險。 在尋找更好的修復 bug #17053 的方法時注意到。 這個錯誤已經存在很長時間了,所以向後移植到所有支援的分支。 https://git.postgresql.org/pg/commitdiff/131ea3e908d3c97a2fe1ab25cce5046dd5cb905f
集中管理工具陳述式的保護性複製邏輯。在「簡單查詢」程式碼路徑中,對於工具陳述式的剖析分析或執行來說,塗改陳述式的節點樹是可以接受的,因為之後會直接丟棄。但是,如果節點樹位於計畫快取中,這就不可接受了,因為這會損壞後續的執行。到目前為止,我們已經通過讓個別的工具陳述式函數在要修改樹時應用 copyObject() 來處理這個問題。但是,這很容易出現遺漏錯誤。Charles Samborski 提出的 Bug #17053 顯示 CREATE/ALTER DOMAIN 沒有收到此備忘,並且如果從計畫快取重複執行可能會崩潰。在後端分支中,我們只會針對此問題應用一個狹窄的臨時解決方案,但在 HEAD 中,似乎謹慎的做法是採用更原則性的修復,以消除未來發生其他類似錯誤的可能性。因此,讓我們將執行 copyObject 的責任從其子項提升到 ProcessUtility 中,從而確保它發生在所有工具陳述式類型中。此外,修改 ProcessUtility 的 API,以便其呼叫者可以告訴它是否需要複製步驟。事實證明,在所有情況下,直接呼叫者都知道節點樹是否是暫時性的,因此這不會涉及大量的程式碼修改。這樣,雖然我們在從快取執行程式碼路徑中由於有時複製不會被修改的節點樹而損失了一點,但我們通過不複製可拋棄的節點樹而在簡單查詢程式碼路徑中獲得了一些東西。複製成本高昂的陳述式幾乎肯定是無論如何都必須複製的陳述式,因此快取程式碼路徑中的損失不應該太大。(請注意,整個問題僅適用於工具陳述式。可優化的陳述式沒有這個問題,因為我們很久以前就讓執行器將計畫樹視為唯讀。也許有一天我們會讓工具陳述式執行也這樣做,但我不抱太大期望。)討論:https://postgr.es/m/931771.1623893989@sss.pgh.pa.us 討論:https://postgr.es/m/17053-3ca3f501bbc212b4@postgresql.org https://git.postgresql.org/pg/commitdiff/7c337b6b527b7052e6a751f966d5734c56f668b5
改進 pgbench 中的版本報告。Commit 547f04e73 導致 pgbench 開始列印其版本號,這似乎是個好主意,但它需要更多的工作: * 如果伺服器版本號不同,也列印伺服器版本號。 * 列印 PG_VERSION 字串,而不是一些重建的近似值。此修補程式複製 psql 用於相同目的的經過良好測試的程式碼。討論:https://postgr.es/m/1226654.1624036821@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/84bee9610965331d5110971d8de390a5bbe2effc
修復 DROP OWNED BY 與重複 polroles 條目的錯誤行為。通常,pg_policy.polroles 陣列不會多次列出相同的角色;但是 CREATE POLICY 不會阻止這種情況。如果我們對多次列出的角色執行 DROP OWNED BY,RemoveRoleFromObjectPolicy 要么遇到斷言失敗,要么遇到 tuple-updated-by-self 錯誤。重寫它以正確處理重複的條目,並添加 CommandCounterIncrement 呼叫以防止其他問題。根據討論,這裡應該進行其他清理,但這似乎是最小的基本修復。根據 Alexander Lakhin 提出的 Bug #17062。它一直都存在問題,因此回溯修補到所有支援的分支。討論:https://postgr.es/m/17062-11f471ae3199ca23@postgresql.org https://git.postgresql.org/pg/commitdiff/d21fca084356946664bfce19d66d2df2bb873cbd
為 v14 中新增的 libpq 功能提供功能測試巨集。我們收到一個請求,要求提供一種在編譯時測試新管線功能可用性的方法。更普遍地說,似乎提供一種通過 #ifdef 測試所有新 libpq API 功能的方法是個好主意。人們一直在使用來自 pg_config.h 的版本來實現這一點;但是在越來越常見的不同情境中,它更可能代表伺服器版本而不是 libpq 版本。如果 libpq-fe.h 本身是關於它提供什麼功能的真實來源,則更安全。因此,制定一項策略,即從 v14 開始,當我們在那裡添加新的 API 時,我們將向 libpq-fe.h 添加一個合適的 feature-is-present 巨集。(追溯應用此策略似乎沒有多大意義,但對於 v14 來說還不算太晚。)Tom Lane 和 Alvaro Herrera,根據 Boris Kolpackov 的建議。討論:https://postgr.es/m/boris.20210617102439@codesynthesis.com https://git.postgresql.org/pg/commitdiff/6991e774e0304f5ef488cf1ae4fa79578b6ae3d5
穩定由 commit f61db909d 新增的測試案例。Buildfarm 成員 ayu 和 tern 有時會顯示與此查詢預期不同的計畫。我之前一直無法重現它,但今天我終於意識到發生了什麼。如果存在併發的開啟交易(可能是 buildfarm 中執行的自動清理,但也可以手動安排),則由 DELETE 刪除的幾行記錄的索引條目不會立即被清除,從而導致規劃器對 ft2.c1 極值估計值的更改,這會將“c1 > 1100”的行數估計值移動到足以將連接計畫從 nestloop 更改為 hash。要修復此問題,請將查詢條件更改為“c1 > 1000”,無論是否存在併發的開啟交易,都會首選 hash 計畫。由於此 UPDATE 被定制為無操作,因此沒有其他任何更改。報告:https://buildfarm.postgresql.org/cgi-bin/show_log.pl?nm=ayu&dt=2021-06-09%2022%3A45%3A48 報告:https://buildfarm.postgresql.org/cgi-bin/show_log.pl?nm=ayu&dt=2021-06-13%2022%3A38%3A18 報告:https://buildfarm.postgresql.org/cgi-bin/show_log.pl?nm=tern&dt=2021-06-20%2004%3A55%3A36 https://git.postgresql.org/pg/commitdiff/5843659d091bfb6f2c60e010ea1fd00e55ee6ada
Michaël Paquier 推送了
刪除 VACUUM FULL/CLUSTER 中的強制 TOAST 重新壓縮。在 bbe0a81 中引入的 TOAST 數據重新壓縮添加的額外檢查被證明會對 VACUUM 或 CLUSTER 產生效能影響,即使沒有進行重新壓縮。對於包含非 NULL 值的更多可 TOAST 化的欄位,這更加明顯。可以進行改進以使這些額外的檢查不那麼昂貴,但這在現階段對於 14 來說不是重要的,而且我們也不確定 VACUUM FULL/CLUSTER 的程式碼路徑是否適合這項工作。根據與包括 Andres Freund、Robert Haas、Álvaro Herrera、Tom Lane 和我自己在內的多個人的討論。討論:https://postgr.es/m/20210527003144.xxqppojoiwurc2iz@alap3.anarazel.de https://git.postgresql.org/pg/commitdiff/dbab0c07e5ba1f19a991da2d72972a8fe9a41bda
改進 pg_event_trigger_ddl_commands() 中已刪除物件的處理。當挖掘 pg_event_trigger_ddl_commands() 返回的物件列表時,發現為已刪除的物件可能會導致快取查找錯誤,因為在物件遺失的情況下,獲取物件位址和類型名稱的呼叫將會失敗。這些查找錯誤可能會在使用涉及 identity 欄位的 ALTER TABLE 子指令的組合中看到。在此程式碼路徑中更改了查找邏輯,以獲得與任何其他 SQL 可呼叫函數類似的行為,方法是忽略找不到的物件,從而利用 2a10fdc。未更改後端分支,因為它們需要此提交,該提交對於穩定分支來說太具侵入性。同時,添加測試案例以使用 identity 欄位執行事件觸發器,並為關係加強更多使用事件 ddl_command_end 的案例。作者:Sven Klemm、Aleksander Alekseev、Michael Paquier 討論:https://postgr.es/m/CAMCrgp2R1cEXU53iYKtW6yVEp2_yKUz+z=3-CTrYpPP+xryRtg@mail.gmail.com https://git.postgresql.org/pg/commitdiff/2d689babe3cb50dcb29f6ed595a61d56e518c0d8
doc: 更一致地將標記 <productname> 應用於 OpenSSL。作者:Daniel Gustafsson 討論:https://postgr.es/m/CE12DD5C-4BB3-4166-BC9A-39779568734C@yesql.se https://git.postgresql.org/pg/commitdiff/f80979f659d39e238e95444e6752142799428078
Bruce Momjian 推送了
文件:新增關於陣列函數參考的 PG 14 發行說明項目。引用某些內建陣列函數的使用者定義物件需要在 PG 14 中重新建立。回報者:Justin Pryzby 討論:https://postgr.es/m/20210608225618.GR16435@telsasoft.com https://git.postgresql.org/pg/commitdiff/25dfb5a831a1b8a83a8a68453b4bbe38a5ef737e
文件:PG 14 發行說明更新。回報者:Justin Pryzby 討論:https://postgr.es/m/20210612034551.GU16435@telsasoft.com https://git.postgresql.org/pg/commitdiff/a2559d4093725592a3fd5da8a4c7ac7c883115a0
文件:PG 14 發行說明修正。與邏輯複寫屬性和 BRIN 索引相關的項目。回報者:Tomas Vondra, John Naylor 討論:https://postgr.es/m/0db66294-a668-2caa-2b5e-a8db60b30662@enterprisedb.com, CAFBsxsH21KnteYdk33F1oZu2O726NSD6_XBq51Tn0jytsA1AnA@mail.gmail.com https://git.postgresql.org/pg/commitdiff/86b222b09071d3918c5c55b164d22b2236d3f872
Álvaro Herrera 推送了
修正 1632ea43682f 中的邏輯錯誤。我忽略了一個條件在邏輯上是反轉的。修正比簡單地否定條件稍微複雜一些,以使程式碼更易於閱讀。同時修正同一個 commit 留下的過時註解。作者:Masahiko Sawada sawada.mshk@gmail.com 作者:Álvaro Herrera alvherre@alvh.no-ip.org 審閱者:Amit Kapila amit.kapila16@gmail.com 討論:https://postgr.es/m/YMRlmB3/lZw8YBH+@paquier.xyz https://git.postgresql.org/pg/commitdiff/33c509956704e1d918077b51ccd954f2e201a8f5
為過時的 slot 新增具有活動 walsender 的測試案例。用於在保留的 WAL 大小過大時向正在運行的 walsender 發送信號的程式碼在此 commit 之前完全未被涵蓋;這增加了對該案例的涵蓋範圍。此測試涉及向 walsender 和 walreceiver 發送 SIGSTOP 並在推進 WAL 時運行檢查點,然後發送 SIGCONT。在 Perl 測試中沒有這種編碼的先例,並且我對相關手冊頁的閱讀表明它很可能在 Windows 上失敗。因此,此測試始終在該平台上跳過。作者:Álvaro Herrera alvherre@alvh.no-ip.org 討論:https://postgr.es/m/202106102202.mjw4huiix7lo@alvherre.pgsql https://git.postgresql.org/pg/commitdiff/09126984a2631db8dd6299f23954e0dede69735f
還原「為過時的 slot 新增具有活動 walsender 的測試案例」。這會還原 commit 09126984a263;在那裡新增的測試案例在仍然神秘的情況下失敗了一次。現在最好移除該測試,以便 14beta2 不會內建隨機故障。https://git.postgresql.org/pg/commitdiff/96795176810b979a2bf1f4563bdcb161679d5b95
Noah Misch 推送了
複製編輯 pg_terminate_backend() "timeout" 參數的文字。將 pg_description 條目還原為其 v13 形式,因為這些訊息通常保持較短,並且不討論個別參數。沒有 catversion 變更,因為 pg_description 內容不會損害後端相容性或應用程式相容性。Justin Pryzby 討論:https://postgr.es/m/20210612182743.GY16435@telsasoft.com https://git.postgresql.org/pg/commitdiff/0aac73e6a2602696d23aa7a9686204965f9093dc
移除 pg_wait_for_backend_termination()。它無法等待已離開 procarray 的後端。容忍該限制的使用者可以輪詢 pg_stat_activity。其他使用者可以使用 pg_terminate_backend() 的 "timeout" 引數。審閱者:Bharath Rupireddy。討論:https://postgr.es/m/20210605013236.GA208701@rfd.leadboat.com https://git.postgresql.org/pg/commitdiff/5f1df62a459b51ab3bb625a0ee5e655429254257
Amit Kapila 推送了
修正推測性中止的解碼。在推測性插入的解碼期間,我們依賴於確認記錄或下一個變更記錄來清理 toast hash。但這可能會導致多個問題 (a) 如果在交易中進行推測性插入後既沒有確認記錄,也沒有任何其他記錄,則會發生記憶體洩漏,(b) 如果下一個操作不是在同一張表格上進行插入/更新,則會發生錯誤和斷言失敗。修復方法是開始將 spec abort 變更放入佇列,並在處理期間清理 toast hash 和變更記錄。目前,我們正在將 toast 和主要表格的 spec abort 放入佇列,即使我們在處理主要表格的 spec abort 記錄時執行清理。稍後,如果我們有一種區分 toast 的 spec abort 記錄和主要表格的 spec abort 記錄的方法,我們可以避免將 toast 表格的 spec abort 變更放入佇列。回報者:Ashutosh Bapat 作者:Dilip Kumar 審閱者:Amit Kapila 回溯修補:9.6,它是從那裡引入的 討論:https://postgr.es/m/CAExHW5sPKF-Oovx_qZe4p5oM6Dvof7_P+XgsNAViug15Fm99jA@mail.gmail.com https://git.postgresql.org/pg/commitdiff/4daa140a2f50e9a160bc180c3997ee13c7aabf9e
記錄同步邏輯複寫中的一些注意事項。在同步邏輯設定中,鎖定 [使用者] 目錄表格可能會導致死鎖。這是因為交易的邏輯解碼可以鎖定目錄表格以存取它們,因此在交易中專屬鎖定這些表格可能會導致死鎖。為了避免這種情況,使用者必須避免對目錄表格進行專屬鎖定。作者:Takamichi Osumi 審閱者:Vignesh C, Amit Kapila 回溯修補:9.6 討論:https://postgres.tw/message-id/20210222222847.tpnb6eg3yiykzpky%40alap3.anarazel.de https://git.postgresql.org/pg/commitdiff/3cb828dbe26087e7754f49f3cfe3ed036d5af439
處理 RelationGetIdentityKeyBitmap 中沒有複寫身分索引的情況。Commit e7eea52b2d 引入了一個新函數 RelationGetIdentityKeyBitmap,它忽略了處理關係上沒有複寫身分索引的情況。作者:Mark Dilger 審閱者:Takamichi Osumi, Amit Kapila 討論:https://postgres.tw/message-id/4C99A862-69C8-431F-960A-81B1151F1B89@enterprisedb.com https://git.postgresql.org/pg/commitdiff/2731ce1bd550d08f3fdd7bcb1497af4b95170976
Alexander Korotkov 推送了
支援 unnest(multirange) 並將 multirange 轉換為範圍陣列。已經發現 multirange 缺乏將它們分解為個別範圍的能力。訂閱和適當的擴展物件表示需要大量工作,並且對於 v14 來說太晚了。此 commit 提供了 unnest(multirange) 的實作,並將 multirange 轉換為範圍陣列,這非常簡單。unnest(multirange) 定義為多型程序。每個 multirange 類型都複製了轉換底層程序之目錄描述,因為我們沒有 anyrangearray 多型類型可以使用。Catversion 已變更。回報者:Jonathan S. Katz 討論:https://postgr.es/m/flat/60258efe-bd7e-4886-82e1-196e0cac5433%40postgresql.org 作者:Alexander Korotkov 審閱者:Justin Pryzby, Jonathan S. Katz, Zhihong Yu https://git.postgresql.org/pg/commitdiff/29854ee8d1ca4a46adb7e84deb17e6fb18e531cc
在文件章節標題中新增遺失的類型名稱 "multirange"。討論:https://postgr.es/m/CAFj8pRDioOxiJgmgw9TqQqZ3CxnJC4P5B2Oospf2eMgAjJuewA%40mail.gmail.com 作者:Pavel Stehule, Alexander Korotkov 審閱者:Justin Pryzby, Tom Lane https://git.postgresql.org/pg/commitdiff/ad2da246c69dd5ec55764d4b6066f3b0c0d24ca2
由於建置農場故障,還原 29854ee8d1。回報者:Tom Lane 討論:https://postgr.es/m/CAPpHfdvcnw3x7jdV3r52p4%3D5S4WUxBCzcQKB3JukQHoicv1LSQ%40mail.gmail.com https://git.postgresql.org/pg/commitdiff/817bb0a7d1e02df4643d37304aed8574cf43f629
Peter Geoghegan 推送了
從 VACUUM 狀態中移除不需要的欄位。錯誤修正 commit 5fc89376 有效地將 vacuumlazy.c 全域狀態結構的 lock_waiter_detected 欄位變成 lazy_truncate_heap() 擁有的私有狀態。透過將結構欄位替換為區域變數來完成此操作。https://git.postgresql.org/pg/commitdiff/958cfbcf2dd338e3179c2d8a35f48bde020eba60
支援停用 VACUUM 的索引略過功能。將 INDEX_CLEANUP VACUUM 參數(以及對應的 reloption)泛化:將其變成三元樣式的布林參數。現在它公開了第三個選項 "auto"。"auto" 選項(現在是預設值)啟用了 commit 1e55e7d1 增加的「略過索引清理」最佳化。"VACUUM (INDEX_CLEANUP TRUE)" 被重新定義為讓 VACUUM 再次簡單地執行任何需要的索引清理,無論在目標堆積關係的第一次掃描期間遇到多少無效元組(除非剛好為零)。這讓使用者可以選擇退出「略過索引清理」最佳化,如果出於任何原因,證明有此需要。PostgreSQL 開發人員預期也會不時地將其用作測試選項。"VACUUM (INDEX_CLEANUP FALSE)" 的作用與以往相同:它強制停用索引清理和索引整理。預計在 PostgreSQL 中不會經常用到。
Andrew Dunstan 推送了
進一步改進 stuck_on_old_timeline 恢復測試。TestLib::perl2host 可以接受檔案引數以及目錄引數,因此程式碼變得相當簡單。還新增了有關為何我們使用正斜線以及為何我們設定 PERL_BADLANG=0 的註解。討論:https://postgr.es/m/e9947bcd-20ee-027c-f0fe-01f736b7e345@dunslane.net https://git.postgresql.org/pg/commitdiff/54a5ed22016940d7ad5060ed62d23473924756a1
除了普通表之外,不要為任何其他東西設定快速預設值。Release 11 中新增的快速預設程式碼忽略了檢查要新增快速預設值的表是否為普通表。因此,可以將其新增到外部表中,這會產生可預見的錯誤。在這裡,我們執行該檢查。此外,在後端分支上,由於其中一些可能已逃逸到實際環境中,如果我們遇到非普通表的屬性遺失值,我們會忽略它。修正錯誤 #17056 回溯至版本 11,審閱者:Andres Freund、Álvaro Herrera 和 Tom Lane https://git.postgresql.org/pg/commitdiff/0a4efdc7ebf2584257b166c87e82797eb92815b5
Heikki Linnakangas 推送了
修正過時的註解,該註解談論 WAL 檔案的搜尋位置。自從 commit c24dcd0cfd 以來,我們一直在使用 pg_pread() 讀取 WAL 檔案,這不會變更搜尋位置(除非我們回退到 src/port/pread.c 中的實作)。相應地更新註解。回溯至:12,我們開始使用 pg_pread() 的版本 https://git.postgresql.org/pg/commitdiff/d0303bc8d2670d11c9df9220aa08a2c33529e100
整理 GetMultiXactIdMembers()
在發生錯誤時的行為。其中一個錯誤路徑讓 *members
未初始化。這不是實際的錯誤,因為大多數呼叫者在函數傳回 -1 時不會查看 *members
,但讓我們保持整潔。heap_lock_tuple() 中的一個呼叫者會執行 "if (members != NULL) pfree(members)",但 AFAICS 它從未傳遞無效的 'multi' 值,因此不應達到該錯誤情況。呼叫者的期望也有點不一致。heap_lock_tuple() 會在 'members' 陣列為非 NULL 時釋放它,其他呼叫者會在 "nmembers >= 0" 時釋放它,還有一些呼叫者會在 "nmembers > 0" 時釋放它。這也不是實際的錯誤,因為函數永遠不應傳回 0,但為此新增一個 Assert 以使其更清楚。我暫時沒有動呼叫者。我也移動了我們設定 *nmembers
的行。之前沒有錯,但我喜歡在 'return' 陳述式旁邊執行此操作,以清楚表明它始終在傳回時設定。此外,刪除 ereport(ERROR) 之後的一個無法到達的 return 陳述式,為了簡潔起見,並與之後類似的 if 區塊保持一致。作者:Greg Nancarrow 以及我所做的其他變更 回溯至:9.6,所有支援的版本 https://git.postgresql.org/pg/commitdiff/d24c5658a80c8f5037e9e1948de311d3f3350f12
Tomáš Vondra 推送了
Fujii Masao 推送了
Amit Khandekar 送出了一個 WIP 修補程式,允許在 worker 程序中使用子交易。
Bertrand Drouvot 送出了另一個修訂版的修補程式,以允許在備用伺服器上進行邏輯解碼。
Thomas Munro 送出了另一個修訂版的修補程式,以針對僅索引掃描使用元組層級的 SIREAD 鎖定,並在可能的情況下跳過 btree 頁面上的 SIREAD 鎖定。
Andrew Dunstan 送出了另一個修訂版的修補程式,旨在修正一個錯誤,該錯誤表現為在變更具有預設值的外部表格欄位的類型時發生分段錯誤。
Tomáš Vondra 送出了另一個修訂版的修補程式,以使用擴展統計資訊來改進聯結估算。
Bharath Rupireddy 送出了另一個修訂版的修補程式,以移除 pg_wait_for_backend_termination()。
Fabien COELHO 送出了另一個修訂版的修補程式,以將 psql 中的 echo 系統整合到其自身的函數中。
Yugo Nagata 和 Fabien COELHO 交換了 pgbench 的修補程式,這些修補程式確保僅在請求時才計算和儲存 conn_duration。
Jehan-Guillaume de Rorthais 送出了一個 PoC 修補程式,當 log_statement_stats=on 時,將等待事件追蹤到記錄檔。
Yugo Nagata 和 Fabien COELHO 交換了 patch,以避免因跳過事務導致 pbgench 進入停滯狀態。
Jacob Champion 和 Daniel Gustafsson 交換了 patch,以支援 NSS 作為 libpq 的 TLS 後端。
Dilip Kumar 和 Amit Langote 交換了 patch,旨在修復一個 bug,該 bug 表現為使用 toast 洩漏記憶體來解碼推測性插入。
Yugo Nagata 和 Fabien COELHO 交換了 patch,旨在修復 pgbench 中的一個 bug,該 bug 表現為負值的「初始連線時間」。
Takamichi Osumi 和 Amit Kapila 交換了 patch,以修復鎖定 [user] 目錄表、2PC 和邏輯複製之間的一個問題。
Justin Pryzby 和 Michaël Paquier 交換了 patch,以新增更多 WAL 壓縮選項。
Ranier Vilela 提交了另一個版本的 patch,以提高對 ProcArray 的存取效率。
David Fetter 提交了一個 patch,以在迴歸測試中適當使用單數形式。
Alexander Pyhalov 提交了另一個版本的 patch,以實作 case expression pushdown。
Ranier Vilela 提交了一個 patch,以修復 ecpg 中未以 null 結尾的緩衝區。
Fabien COELHO 和 Yugo Nagata 交換了 patch,旨在修復一個 bug,該 bug 表現為 pgbench 日誌記錄中的錯誤。
Dmitry Dolgov 提交了另外兩個版本的 patch,以防止 ArrayExpr 中的每個元素被打亂。
Dilip Kumar 提交了一個 patch,使 CREATE DATABASE 完全被 WAL 記錄,因此發出該命令不再強制執行檢查點。
Ajin Cherian 提交了另一個版本的 patch,以新增一個選項來在 CREATE_REPLICATION_SLOT 命令中設定 two-phase,並支援 pg_recvlogical 中的 two-phase 解碼。
Peter Smith 和 Ajin Cherian 交換了 patch,以支援 two-phase 事務的邏輯解碼。
Daniel Gustafsson 提交了一個 patch,以在文件中使用更正確和當前的 TLS/SSL 來代替 SSL。
Thomas Munro 提交了另一個版本的 patch,以在共享記憶體中追蹤關係大小、為 smgrnblocks() 提供無鎖定的快速路徑,並將 fifo 更新為 lru 以清除有效的快取。
Kyotaro HORIGUCHI 提交了另一個版本的 patch,以在 pg_waldump 的錯誤中顯示更多詳細資訊。
Tom Lane 提交了一個 patch,允許在 isolationtester 腳本中使用常規識別符號。
Matthias van de Meent 提交了另一個版本的 patch,以修復 GetOldestNonRemovableTransactionId 中的一個 bug,該 bug 沒有傳回與 GlobalVisTestFor(rel) 一致的值。 此外,lazy_scan_prune 有一個不正確的假設,即 GlobalVis*Rels 永遠不會有 OldestXmin < vacrel->OldestXmin,這是錯誤的。 現在已修復此假設,並且已記錄了這些變更。
Heikki Linnakangas 提交了一個 patch,以分割 xlog.c,因為它變得過於笨重。
Thomas Munro 提交了另一個版本的 patch,以建立和使用 qsort 範本。
Amit Langote 提交了另外三個版本的 patch,以使用常數分割區鍵來跳過分割區元組路由。
Jeff Davis 提交了兩個版本的 patch,以闡明複製協定的文件。
Tomáš Vondra 提交了一個 PoC patch,以使用 count-min sketch 進行連接基數估算。
Jeff Davis 提交了另一個版本的 patch,以記錄 START REPLICATION 中發生的情況。
Alexander Korotkov 提交了另外三個版本的 patch,以實作 multiranges 的 UNNEST。
Vigneshwaran C 提交了另一個版本的 patch,以新增對 PUBLICATIONs 的 schema 層級支援。
Amul Sul 提交了另一個版本的 patch,以實作 ALTER SYSTEM SET READ {WRITE | ONLY}。
Nitin Jadhav 提交了另一個版本的 patch,以實作啟動程序進度指示器。
Matthias van de Meent 提交了另一個版本的 patch,以實作和使用索引元組屬性迭代,並為 _bt_binsrch*
實作頁面層級的動態前綴截斷。
Mark Dilger 提交了兩個版本的 patch,以選擇性地在發生錯誤時停用訂閱。
Jeff Davis 提交了一個 patch,以修復啟動複製識別系統。
Thomas Munro 提交了另一個版本的 patch,以使用計時器實作 snapshot_too_old。
Takashi Menjo 提交了另一個版本的 patch,以將 PMEM 上的 WAL 段檔案對應為 WAL 緩衝區。
Amit Kapila 提交了另一個版本的 patch,以實作邏輯複製的行篩選。
Egor Rogov 提交了一個 patch,以在 pg_stats 檢視中包含範圍類型的統計資訊。
Álvaro Herrera 提交了另外兩個版本的 patch,以新增一個測試案例,用於使具有活動 walsender 的插槽過時。
Greg Sabino Mullane 提交了另一個版本的 patch,以避免不必要地計算頁面檢查和。
Noah Misch 提交了一個 patch,以移除 XLogFileInit() 跳過 ControlFileLock 的能力。
David Rowley 提交了另一個版本的 patch,以新增一種具有穩定指標的新雜湊表類型。
Thomas Munro 提交了一個 patch,以調整 LLVM 13 API 的變更。