PostgreSQL 14 的下一個 Commitfest 已經開始。如果您是補丁的作者,請務必追蹤審閱,以便您的貢獻可以準備好提交。
pgbitmap 0.93,一種空間最佳化、非稀疏的位圖類型,已發布。https://pgxn.org/dist/pgbitmap/
Pgpool-II 4.2 beta1 https://www.pgpool.net/docs/42/en/html/release-4-2-0.html
pglogical 2.3.3,一個基於邏輯 WAL 的 PostgreSQL 複製系統,已發布。https://www.2ndquadrant.com/en/resources/pglogical/release-notes/
pg_activity 1.6.2,一個類似 top 的 PostgreSQL 伺服器活動監控應用程式,已發布。https://github.com/dalibo/pg_activity/releases/tag/v1.6.2
pg_dumpbinary 2.3,一個用於以二進位格式轉儲 PostgreSQL 資料庫的程式,已發布。https://github.com/lzlabs/pg_dumpbinary/releases/
pgCenter 0.6.6,一個用於觀察和排除 PostgreSQL 故障的命令列管理工具,已發布。https://github.com/lesovsky/pgcenter/releases/tag/v0.6.6
Planet PostgreSQL: http://planet.postgresql.org/
PostgreSQL 每週新聞由 David Fetter 本週為您帶來
請在星期日太平洋標準時間下午 3:00 之前將新聞和公告提交至 david@fetter.org。
David Rowley 推送了
防止關係中過大和 NaN 行數估計。給定一個具有足夠聯結的查詢,查詢規劃器在將行數估計值與聯結選擇性相乘後,估計的行數可能會超過 double 資料類型的限制並變為無限。為了表明達到這種情況需要多麼極端的情況,所報告的特定示例案例需要對沒有任何統計資訊的表進行 379 個聯結,這導致 1.0/DEFAULT_NUM_DISTINCT 用於聯結選擇性。這最終導致行數估計變為無限,並導致 initial_cost_mergejoin() 中的斷言失敗,其中無限行數估計乘以 0.0 的 outerstartsel,從而產生 NaN。失敗的斷言驗證了 NaN <= Inf,這是錯誤的。為了避免這種情況,我們使用 clamp_row_est() 將行數估計限制為最大值 1e100。這個值被認為足夠低,以至於從它衍生的成本將保持在 double 類型可以表示的範圍內。除了修復失敗的斷言之外,這還具有附加的好處,即 add_path() 仍然會收到適當的數值作為成本,這將允許它在極端情況下(例如上述情況)在確定更便宜的路徑時做出更合理的選擇。此外,我們還擺脫了聯結成本函數中的 isnan() 檢查。最初觸發這些檢查的實際情況從未出現在郵件列表中。看來,添加到 clamp_row_est() 中的新代碼很可能會使這些檢查變得多餘,因此只需將它們刪除即可。相當無害的斷言失敗問題也存在於 backbranches 中,但是,將在那裡應用更簡約的修復。報告者:Onder Kalaci 審閱者:Tom Lane 討論:https://postgr.es/m/DM6PR21MB1211FF360183BCA901B27F04D80B0@DM6PR21MB1211.namprd21.prod.outlook.com https://git.postgresql.org/pg/commitdiff/a90c950fc7fd8796daa8c7948e7046bceb272894
最佳化一些 list_delete_ptr 呼叫。在一些地方,我們呼叫 list_delete_ptr() 從 List 中移除一些元素。在許多這些地方,我們知道或者只需很少的額外工作就可以知道我們需要移除的 ListCell 的索引。在這裡,我們將所有這些地方更改為改用以下之一:list_delete_nth_cell()、foreach_delete_current() 或 list_delete_last()。這些中的每一個都可以避免必須迭代列表來按其指針值搜尋要移除的元素。透過這樣做可以獲得一些小的效能提升,但在一般情況下,這些列表都不可能非常大,因此查找可能從來沒有那麼昂貴。但是,其中一些呼叫位於相當熱門的程式碼路徑中,例如 process_equivalence()。因此,那裡任何小的收益都是有用的。作者:Zhijie Hou 和 David Rowley 討論:https://postgr.es/m/b3517353ec7c4f87aa560678fbb1034b@G08CNEXMBPEKD05.g08.fujitsu.local https://git.postgresql.org/pg/commitdiff/e7c2b95d37a2b9c01367f7ccc55703555b39c81c
修復函數標頭註解中不正確的參數名稱。作者:Zhijie Hou 討論:https://postgr.es/m/14cd74ea00204cc8a7ea5d738ac82cd1@G08CNEXMBPEKD05.g08.fujitsu.local 回溯修正:12,錯誤是在此處引入的 https://git.postgresql.org/pg/commitdiff/e83c9f913c6197586af8ac53c1d3652db15a3c91
Michaël Paquier 推送了
修復 pgcrypto 中潛在的記憶體洩漏。當分配一個 EVP 上下文時,有可能洩漏一些由 OpenSSL 直接分配的記憶體,如果分配上下文的初始化失敗,PostgreSQL 會失去對這些記憶體的追蹤。可以使用 EVP_MD_CTX_destroy() 完成清理。請注意,EVP API 自 OpenSSL 0.9.7 以來就存在,並且我們在樹中擁有舊版本的等效實作,因為 ce9b75d(程式碼已透過 9b7cd59a 移除,截至 10~)。但是,在 9.5 和 9.6 中,現有程式碼使用 EVP_MD_CTX_destroy() 和 EVP_MD_CTX_create(),而當使用 OpenSSL 0.9.6 或更舊版本建置樹時,沒有等效的實作,這表示自 e2838c5 引入以來,此程式碼實際上在使用此類版本時已損壞。由於我們沒有收到任何關於此的投訴,因此似乎不值得在 9.5 和 9.6 中進行處理,因此為了簡單起見,我將其排除在外。作者:Michael Paquier 討論:https://postgr.es/m/20201015072212.GC2305@paquier.xyz 回溯修正:9.5 https://git.postgresql.org/pg/commitdiff/ca2a12c935f75fb56c3b14527d6f2ff6f549ea85
審閱 PerfectHash.pm 產生的程式碼格式。80f8eb7 已將 PerfectHash.pm 產生的某些程式碼新增至正規化快速檢查標頭,這些程式碼與此儲存庫的 gitattributes 設定不相容,因為空白在表格中行的第一個元素的一組標籤之後。無需為 gitattributes 新增例外,而是重新設計產生的格式,以便使用空格進行右側填充,而不是左側填充。這使得產生的表格保持可讀的形狀及其一組欄位,從而無需更新 gitattributes。報告者:Peter Eisentraut 作者:John Naylor 討論:https://postgr.es/m/d601b3b5-a3c7-5457-2f84-3d6513d690fc@2ndquadrant.com https://git.postgresql.org/pg/commitdiff/19ae53c92d5f5bdfb971d560a562e84c5f65c8b0
改善後端 Unicode 的 {de,re}composition 效能。這個變更使用兩個完美的雜湊函數來取代現有的二元搜尋,分別用於後端程式碼中的組合 (composition) 與分解 (decomposition),代價是後端二進位檔略為增大(在 libpgcommon_srv.a 中增加 35kB)。根據測量結果,對於 NFC 和 NFKC 轉換,這將組合與分解的速度提高了 30~40 倍,而所有其他操作至少加快了 40%。雖然不如 libicu 的效能「好」,但根據 Daniel Verite 的回饋,它大幅縮小了差距。分解表維持不變,用於前端程式碼中的二元搜尋,因為我們更關心 libpq 等函式庫的大小,而非效能,因為它僅在與 SCRAM 身份驗證相關的程式碼路徑中才會用到。因此,請注意,重新組合的完美雜湊函數需要使用一個新的反向查找陣列,以連結回現有的分解表。即使使用 --enable-debug,所有前端交付項目的大小也保持不變,包括 libpq。 作者:John Naylor 審閱者:Michael Paquier, Tom Lane 討論:https://postgr.es/m/CAFBsxsHUuMFCt6-pU+oG-F1==CmEp8wR+O+bRouXWu6i8kXuqA@mail.gmail.com https://git.postgresql.org/pg/commitdiff/783f0cc64dcc05e3d112a06b1cd181e5a1ca9099
在 psql 中新增 ALTER TABLE .. FORCE ROW LEVEL SECURITY 的 Tab 自動完成功能。這會自動完成 FORCE 和 NO FORCE 選項,NO INHERIT 需要進行小幅調整。 作者:Li Japin 討論:https://postgr.es/m/15B10F9F-5847-4F5E-BD66-8E25AA473C95@hotmail.com https://git.postgresql.org/pg/commitdiff/0b46e82c06b0c4b0dc6a94a890d23945ebf720fd
修正 --enable-coverage 和新的 unicode {de,re}composition 程式碼的問題。 genhtml 使用這個新的程式碼時會產生以下警告: WARNING: function data mismatch at /path/src/common/unicode_norm.c:102 HTML 涵蓋率報告很在意原始檔中定義的函數的唯一性,忽略任何關於 CFLAGS 的假設。 783f0cc 引入了 get_code_entry() 的重複定義,導致警告,並可能在報告中產生一些不正確的資料。此變更重構程式碼,使程式碼只有一個函數宣告,修正了警告。 783f0cc 中的疏忽。 回報者:Tom Lane 作者:Michael Paquier 審閱者:Tom Lane 討論:https://postgr.es/m/207789.1603469272@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/2771fcee18be0b86d2e008add20f73d175e06e90
擴充 PageIsVerified() 以處理更多自訂選項。這對於檢查關係頁面很有用,無需將頁面載入到共享緩衝區中,並且有兩種情況可以利用它:基礎備份中的頁面驗證和線上、鎖定安全的版本。使用一個巨集來呼叫新的擴充例程,該巨集使用的選項與原始版本相容,從而保持了與過去版本的相容性。 從同一作者的較大補丁中提取。 作者:Anastasia Lubennikova 審閱者:Michael Paquier, Julien Rouhaud 討論:https://postgr.es/m/608f3476-0598-2514-2c03-e05c7d2b0cbd@postgrespro.ru https://git.postgresql.org/pg/commitdiff/d401c5769ef6aeef0a28c147f3fb5afedcd59984
新增 CheckBuffer() 以檢查磁碟上的頁面,無需載入共享緩衝區。 CheckBuffer() 被設計為一個並發安全 (concurrent-safe) 的函數,能夠在不將關係頁面載入共享緩衝區的情況下,對其執行健全性檢查。該操作使用共享緩衝區映射雜湊表中所涉及分區的鎖定以及緩衝區本身的 I/O 鎖定來完成,從而防止因任何並發活動而導致的誤報風險。此函數的主要用途是檢測關係頁面的磁碟上損壞。如果在共享緩衝區中找到一個頁面,則會檢查磁碟上的頁面是否為髒頁(如果是髒頁,後續的檢查點會刷新有效版本的頁面),因為有可能頁面在共享緩衝區中存在很長時間,而其磁碟上的版本已損壞。如果主機被拔掉電源,這種情況可能會導致叢集損壞。如果在共享緩衝區中找不到該頁面,則會檢查其磁碟上的狀態。 PageIsVerifiedExtended() 用於應用與將頁面載入共享緩衝區時相同的健全性檢查。這個函數將被即將到來的補丁使用,該補丁能夠使用 SQL 函數檢查磁碟上關係頁面的狀態。 作者:Julien Rouhaud, Michael Paquier 審閱者:Masahiko Sawada 討論:https://postgr.es/m/CAOBaU_aVvMjQn=ge5qPiJOPMmOj5=ii3st5Q0Y+WuLML5sR17w@mail.gmail.com https://git.postgresql.org/pg/commitdiff/c780a7a90a8e7b074405ea2007e34f94e227e695
新增 pg_relation_check_pages() 以檢查關係的磁碟上頁面。 這利用了 c780a7a 中引入的 CheckBuffer(),新增了一個 SQL 包裝器 (wrapper),能夠對關係的所有頁面執行檢查。 預設情況下,會檢查關係的所有 fork 類型,並且可以僅檢查給定的關係 fork。 請注意,如果輸入中給定的關係沒有實體儲存或為暫時性關係,則不會產生錯誤,從而可以在與簡單的 pg_class 掃描結合使用時進行完整的資料庫檢查。 這不僅限於啟用資料校驗和的叢集,因為沒有資料校驗和的叢集仍然可以使用頁面標頭或針對充滿零的頁面應用頁面檢查。 此函數傳回一組元組 (tuples),其中包括: - 偵測到損壞頁面的實體檔案(不含區段編號,因為區段編號可能與 AM 相關,可以從堆積的區塊編號猜測)。 使用來自 PGPATH 的相對路徑。 - 損壞頁面的區塊編號。 預設情況下,只有超級使用者才能存取此函數,但可以將執行權授予其他使用者。 此處引入的功能仍然是最基本的,並且可以進行更多改進,例如: - 新增開始和結束區塊編號以在區塊範圍內執行檢查,這僅在檢查一個 fork 類型時適用。 - 新增一些進度報告。
節流 (Throttling),函數輸入中包含配置參數,或者可能是一些基於成本的 GUC。在主要回歸測試套件中新增了針對正面案例的回歸測試,並針對涉及模擬頁面損壞的案例新增了 TAP 測試。 提高目錄版本。 作者:Julien Rouhaud, Michael Paquier 審閱者:Masahiko Sawada, Justin Pryzby 討論:https://postgr.es/m/CAOBaU_aVvMjQn=ge5qPiJOPMmOj5=ii3st5Q0Y+WuLML5sR17w@mail.gmail.com https://git.postgresql.org/pg/commitdiff/f2b883969557f4572cdfa87e1a40083d2b1272e7
在 pg_relation_check_pages() 中使用正確的 GetDatum()。 應該使用 Int64GetDatum(),但卻使用了 UInt32GetDatum()。 f2b8839 中的疏忽。 根據 buildfarm 成員 florican。 討論:https://postgr.es/m/1226629.1603859189@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/ce7f772c5e6066e0bbafea5759e652c9757c8e6b
修正 pg_relation_check_pages() 中 pfree() 的錯誤位置。 當有多個頁面被視為損壞並在 SRF 中報告時,這將導致該函數崩潰。 回報者:Noriyoshi Shinoda 討論:https://postgr.es/m/TU4PR8401MB11523D42C315AAF822E74275EE170@TU4PR8401MB1152.NAMPRD84.PROD.OUTLOOK.COM https://git.postgresql.org/pg/commitdiff/60a51c6b32960822d3987ea7d2816c65bdbcb314
在 pgcrypto 中為加密失敗新增錯誤代碼。 PXE_DECRYPT_FAILED 已經存在於解密錯誤,但沒有等效的加密錯誤代碼。有一個程式碼路徑處理 OpenSSL 的此類失敗,但它使用了不一致的 PXE_ERR_GENERIC。 此變更將此程式碼路徑切換為使用新的錯誤 PXE_ENCRYPT_FAILED 而不是 PXE_ERR_GENERIC,使加密使用的程式碼與解密更加一致。 作者: Daniel Gustafsson 討論: https://postgr.es/m/03049139-CB7A-436E-B71B-42696D3E2EF7@yesql.se https://git.postgresql.org/pg/commitdiff/aecaa04418f39c32adb3dbf91c4aa7f6e175f01c
在 REINDEX CONCURRENTLY 期間保留 pg_statistic 中的索引資料。在執行 REINDEX CONCURRENTLY 後,與索引關聯的統計資料會遺失,而非並行的情況會正確地保留這些資料。並行和非並行操作對於終端使用者需要保持一致,並且遺失統計資料會迫使等待新的 analyze 發生,這可能需要一些時間,具體取決於現有 autovacuum 工作程式的活動。此問題已透過將 pg_statistic 中與舊索引關聯的任何現有條目複製到新索引來解決。請注意,此複製已經使用 stats collector 中的索引資料完成。報告人: Fabrízio de Royes Mello 作者: Michael Paquier, Fabrízio de Royes Mello 審閱人: Justin Pryzby 討論: https://postgr.es/m/CAFcNs+qpFPmiHd1oTXvcPdvAHicJDA9qBUSujgAhUMJyUMb+SA@mail.gmail.com Backpatch-through: 12 https://git.postgresql.org/pg/commitdiff/b17ff07aa3eb142d2cde2ea00e4a4e8f63686f96
Amit Kapila 提交了程式碼
變更 Vacuum 的 PARALLEL 選項的文件。並行 vacuum 操作要選擇的並行工作程式數量的規則沒有明確指定。報告人: Peter Eisentraut 作者: Amit Kapila Backpatch-through: 13, 在此版本中引入 討論: https://postgr.es/m/36aa8aea-61b7-eb3c-263b-648e0cb117b7@2ndquadrant.com https://git.postgresql.org/pg/commitdiff/560d260d7852dc54a8c587c1b388843e8c433bc8
變更 pg_stat_replication_slots 檢視中的屬性名稱。將 pg_stat_replication_slots 檢視中的屬性 'name' 變更為 'slot_name',使其更清晰,這樣我們將與其他位置(如 pg_stat_wal_receiver 檢視)保持一致,在這些位置我們顯示相同的屬性。順便一提,修正相關程式碼中巨集的一個錯字。由於我們也修改了目錄中的名稱,因此增加 catversion。報告人: Noriyoshi Shinoda 作者: Noriyoshi Shinoda 審閱人: Sawada Masahiko 和 Amit Kapila 討論: https://postgr.es/m/CA+fd4k5_pPAYRTDrO2PbtTOe0eHQpBvuqmCr8ic39uTNmR49Eg@mail.gmail.com https://git.postgresql.org/pg/commitdiff/03d51b776d88badbeb4452c1ab452feb78dce36a
更新 pg_stat_replication_slots 檢視中溢出計數器的描述。 這是為了使溢出計數器的描述更清晰。 作者: Amit Kapila 審閱人: Sawada Masahiko 討論: https://postgr.es/m/CA+fd4k5_pPAYRTDrO2PbtTOe0eHQpBvuqmCr8ic39uTNmR49Eg@mail.gmail.com https://git.postgresql.org/pg/commitdiff/2f0760c9ff827bb3d23ee327e6b46038000c7ef9
pg_stat_replication_slots 檢視中溢出計數器描述的微小改進。 根據 Justin Pryzby 的建議。 討論: https://postgr.es/m/CA+fd4k5_pPAYRTDrO2PbtTOe0eHQpBvuqmCr8ic39uTNmR49Eg@mail.gmail.com https://git.postgresql.org/pg/commitdiff/9e0f87a4955ede0769d2f9a93171145b6ddab901
追蹤來自 ReorderBuffer 的變更串流的統計資料。 這會新增有關從 ReorderBuffer 串流到解碼輸出外掛程式的交易的統計資料。 使用者可以查詢 pg_stat_replication_slots 檢視來檢查這些統計資料,並呼叫 pg_stat_reset_replication_slot 來重設特定槽的統計資料。 使用者可以在 pg_stat_reset_replication_slot 中傳遞 NULL 以重設所有槽的統計資料。 Commit 9868167500 新增了捕獲槽的統計資料的基本基礎結構,而此 commit 擴充了統計資料收集器以追蹤有關槽的其他資訊。 由於我們在目錄條目中新增了新列,因此增加 catversion。 作者: Ajin Cherian 和 Amit Kapila 審閱人: Sawada Masahiko 和 Dilip Kumar 討論: https://postgr.es/m/CAA4eK1+chpEomLzgSoky-D31qev19AmECNiEAietPQUGEFhtVA@mail.gmail.com https://git.postgresql.org/pg/commitdiff/8e90ec5580d5345fef31005d7cc2215ba2125070
Peter Eisentraut 提交了程式碼
改進空白字元。 SQL 檔案不一致地使用了 tab 鍵和空格。 將所有字元轉換為空格並相應地調整縮排。 https://git.postgresql.org/pg/commitdiff/afa0d53d4de6d2f43fbc0a76c88dceb22ba65e86
避免 shm_mq 中出現無效的 alloc size 錯誤。 在 shm_mq_receive() 中,由於增加緩衝區大小的方式,大量的 payload 可能會觸發不合理的「invalid memory alloc request size」錯誤。 新增錯誤檢查(記錄上限)並透過將分配大小限制為 MaxAllocSize 來避免錯誤。 作者: Markus Wanner markus.wanner@2ndquadrant.com 討論: https://postgres.tw/message-id/flat/3bb363e7-ac04-0ac4-9fe8-db1148755bfa%402ndquadrant.com https://git.postgresql.org/pg/commitdiff/26ec6b5948a73d0e07ed9435ee4554594acdf34f
修正在 Windows/MinGW 上的 -Wcast-function-type 警告。 在 de8feb1f3a23465b5737e8a8c160e8ca62f61339 之後,仍然存在一些只有在使用 Windows 上的 GCC 時才可見的警告。 也修正了這些警告。 請注意,ecpg 測試原始程式檔沒有使用完整的 pg_config.h,因此我們無法在那裡使用 pg_funcptr_t,而必須以更長的方式來完成。 https://git.postgresql.org/pg/commitdiff/8a58347a3c10126ce9eb38872a46c55e91faa174
移除過時的 ifdefs。 Commit 8dace66e0735ca39b779922d02c24ea2686e6521 為許多 errno 符號新增了 #ifdefs,因為它們不存在於 Windows 上。 後來,commit 125ad539a275db5ab8f4647828b80a16d02eabd2 為其中一些符號新增了替換 #defines。 因此,來自第一個 commit 的某些變更被第二個 commit 設為無效程式碼,現在可以移除。 討論: https://postgres.tw/message-id/flat/6dee8574-b0ad-fc49-9c8c-2edc796f0033@2ndquadrant.com https://git.postgresql.org/pg/commitdiff/555eb1a4f0114e1c4017093fe840045dde1ed9ea
在適當時,在 Perl 程式碼中使用 croak 而不是 die。 https://git.postgresql.org/pg/commitdiff/f8721bd752790859df747905bc44fb5ad8dbf07d
doc: 修正清單中協定訊息的順序。 AuthenticationGSSContinue 和 AuthenticationSSPI 的順序已交換,基於其他以子程式碼順序列出的 Authentication* 協定訊息。 https://git.postgresql.org/pg/commitdiff/83d727e5b23c43f3fb7221963ddec24277c1126f
doc: 修正清單中協定訊息的順序。 將 GSSENCRequest 移到正確的字母順序位置。 https://git.postgresql.org/pg/commitdiff/8fed2eadb8558185d162cc7fd09192c2e10b915f
使程序 OUT 參數與 JDBC 一起使用。 JDBC 驅動程式會傳送 void 類型的 OUT 參數。 這在呼叫函數時是有意義的,以便在 ParseFuncOrColumn() 中忽略參數。 對於程序呼叫,我們希望將它們視為未知。 審閱人: Andrew Dunstan andrew [AT] dunslane.net 討論: https://postgres.tw/message-id/flat/d7e49540-ea92-b4e2-5fff-42036102f968%402ndquadrant.com https://git.postgresql.org/pg/commitdiff/9213462c539e6412fe0498a7f8e20b662e15c4ec
修正 enum errdetail 以提及位元組 (bytes),而非字元 (chars)。enum 標籤長度是以位元組為單位,而非字元。作者:Ian Lawrence Barwick barwick [AT] gmail.com 審閱者:Julien Rouhaud rjuju123 [AT] gmail.com 討論:https://postgres.tw/message-id/flat/CAB8KJ=itZEJ7C9BacTHSYgeUysH4xx8wDiOnyppnSLyn6-g+Bw@mail.gmail.com https://git.postgresql.org/pg/commitdiff/0525572860335d050a1bea194a5278c8833304d1
新增 select_common_typmod()。此函式與 select_common_type() 和 select_common_collation() 搭配使用。typmods 之前在多個地方使用手寫的邏輯進行組合。select_common_typmod() 中的邏輯並沒有很令人興奮,但它可以使程式碼在一些位置更精簡和易於閱讀,而且將來我們或許可以做更多複雜的事情。作為一個小的增強,假設集合 (hypothetical-set) 彙總的直接和彙總參數的型別統一現在也使用這個新函數統一 typmod,而不是僅僅丟棄它。審閱者:Heikki Linnakangas hlinnaka [AT] iki.fi 討論:https://postgres.tw/message-id/flat/97df3af9-8b5e-fb7f-a029-3eb7e80d7af9@2ndquadrant.com https://git.postgresql.org/pg/commitdiff/f893e68d761adbee7f888109b1adf76151e3e17a
Heikki Linnakangas 推送了
清理程式碼以在 nodeModifyTable.c 中解析「根目標關係」。在分割資料表或具有繼承子資料表的資料表上執行 DDL 時,必須根據原始陳述式中給定的資料表觸發陳述式層級觸發器。用於查找該資料表的程式碼有點混亂且重複。Commit 501ed02cf6 新增了一個輔助函數 getASTriggerResultRelInfo()(後來更名為 getTargetResultRelInfo()),但由於某種原因,它僅在觸發 AFTER STATEMENT 觸發器時使用,而觸發 BEFORE STATEMENT 觸發器的程式碼則重複了邏輯。在 ExecInitModifyTable() 中確定目標關係,並始終在 ModifyTableState 中設定它。過去調用 getTargetResultRelInfo() 的程式碼現在可以直接使用 ModifyTableState->rootResultRelInfo。討論:https://postgres.tw/message-id/CA%2BHiwqFViT47Zbr_ASBejiK7iDG8%3DQ1swQ-tjM6caRPQ67pT%3Dw%40mail.gmail.com https://git.postgresql.org/pg/commitdiff/f49b85d783f6781138f33bbe5f6e98da86907d84
修改子節點到根節點的 tuple 轉換地圖管理。 將 tuple 轉換地圖儲存在 ResultRelInfo 中的一個新的 ri_ChildToRootMap 欄位中,以將來自子資料表的格式的 tuple 轉換為根格式。 如果需要用於 FOR STATEMENT 觸發器的轉換 tuple 捕獲或分割資料表上的 INSERT tuple 路由,則會初始化它。 以前,ModifyTable 將地圖保存在每個子計畫的 ModifyTableState->mt_per_subplan_tupconv_maps 陣列中,或者在使用 tuple 路由時,保存在 ResultRelInfo->ri_Partitioninfo->pi_PartitionToRootMap 中。 新欄位取代了這兩者。 現在子節點到根節點的 tuple 轉換地圖始終在 ResultRelInfo 中可用(如果需要),移除 TransitionCaptureState.tcs_map 欄位。 Exec*Trigger() 函數的呼叫者不再需要設定或保存它,這要簡單得多,且不易出錯。 此外,作為未來的一個最佳化,這將允許我們延遲為給定結果關係建立地圖,直到在執行期間實際處理該關係。 作者:Amit Langote 討論:https://postgres.tw/message-id/CA%2BHiwqHtCWLdK-LO%3DNEsvOdHx%2B7yv4mE_zYK0i3BH7dXb-wxog%40mail.gmail.com https://git.postgresql.org/pg/commitdiff/6973533650c04653d9018f61c1ac99ecb11094bd
移除 PartitionRoutingInfo struct。透過其封閉的 ResultRelInfo 訪問其成員所需的額外間接定址似乎毫無意義。將所有欄位從 PartitionRoutingInfo 移至 ResultRelInfo。作者:Amit Langote 審閱者:Alvaro Herrera 討論:https://postgres.tw/message-id/CA%2BHiwqFViT47Zbr_ASBejiK7iDG8%3DQ1swQ-tjM6caRPQ67pT%3Dw%40mail.gmail.com https://git.postgresql.org/pg/commitdiff/fb5883da86154c3126264bfd97b0cd6f293bcebd
修正全文檢索距離運算符的文檔。Commit 028350f619 將其行為從「至多」更改為「精確」,但忘記更新文檔。向後移植到 9.6。Justin Pryzby 的修補程式,根據 Yaroslav Schekin 的報告。討論:https://postgres.tw/message-id/20201005191922.GE17626%40telsasoft.com https://git.postgresql.org/pg/commitdiff/1a64c7636f24096155f7aa15d7164eba3cdef075
修正文檔中 tsquery 範例的輸出。此查詢的輸出已在 commit 4e2477b7b8 中變更。像該 commit 一樣向後移植到 9.6。Justin Pryzby 的修補程式,根據 Yaroslav Schekin 的報告。討論:https://postgres.tw/message-id/20201005191922.GE17626%40telsasoft.com https://git.postgresql.org/pg/commitdiff/c0bc4c682ee2a84dee2b562db3d17d173a6abc06
修正 TRUNCATE 文檔:ALTER SEQUENCE RESTART 現在是事務性的。ALTER SEQUENCE RESTART 在 commit 3d79013b97 中變為事務性的。向後移植到 v10,這是引入該功能的地方。Justin Pryzby 的修補程式,根據 Yaroslav Schekin 的報告。討論:https://postgres.tw/message-id/20201005191922.GE17626%40telsasoft.com https://git.postgresql.org/pg/commitdiff/2a972e0165c9b34da4cff3001a2dad8e5a9a5a2b
雜項文檔修正。- 雜項文法和標點符號修正。- 風格清理:在範例中的函數參數和 JSON 欄位之間使用空格。例如 "foo(a,b)" -> "foo(a, b)"。在一些缺少分號的 PL/pgSQL 範例中的最後一個 END 之後新增分號。- 透過避免以 ".." 結束句子,使談論 "..." 和 ".." 運算符的句子更清楚。這使其看起來與 "..." 相同 - 修正 HAVING 的語法描述:HAVING 條件不能重複 Justin Pryzby 的修補程式,根據 Yaroslav Schekin 的報告。向後移植到所有支援的版本,在修補程式容易應用的範圍內。討論:https://postgres.tw/message-id/20201005191922.GE17626%40telsasoft.com https://git.postgresql.org/pg/commitdiff/c5f42daa6077a4c309c5280a47d0e114c12dc572
修正 EvalPlanQualStart() 中 es_result_relations 的初始化。commit 1375422c782 中的疏忽。EvalPlanQualStart() 錯誤地重置了父 EState 的 es_result_relations,而它應該初始化它剛剛建立的子 EPQ EState 中的欄位。這顯然是錯誤的,但它沒有造成任何不良影響,因為 es_result_relations 目前在 ExecInit* 階段之後未使用。作者:Amit Langote 討論:https://postgres.tw/message-id/CA%2BHiwqFEuq8AAAmxXsTDVZ1r38cHbfYuiPQx_%3DYyKe2DC-6q4A%40mail.gmail.com https://git.postgresql.org/pg/commitdiff/22b73d3cb0b5bb4c141421f98dd67f091dda3c20
doc: 移除對 pre-8.2 pg_dump 行為的引用。-t/--table 選項的行為變更發生在大約 15 年前,並且似乎沒有必要保留它。作者:Ian Barwick 討論:https://postgres.tw/message-id/CAB8KJ%3Dh-XALik4M7gv-pX48%3D%2BSPWexfaYwa%2ByTnPwD3DxceXrg%40mail.gmail.com https://git.postgresql.org/pg/commitdiff/902b57c9bf27b3ea2963ef832cddb38b1203130e
docs: 移除有關與非常舊的版本不相容的注意事項。這些版本已經足夠舊,它們會對新的讀者造成更多的困惑和分心,而不是幫助任何人從非常舊的伺服器升級。討論:https://postgres.tw/message-id/fd93f1c5-7818-a02c-01e5-1075ac0d4def%40iki.fi https://git.postgresql.org/pg/commitdiff/fa42c2ecb0f6e89f74bc1cc37b56a1d43e45d513
修正了新的 GiST sortsupport 函數中遺失的驗證。由於這個問題,如果您嘗試使用新的 sortsupport 函數建立運算子族,則會收到錯誤訊息:ERROR: support function number 11 is invalid for access method gist。我們在 commit 16fa9b2b30 中新增 sortsupport 函數時忽略了這個問題,因為它僅將 sortsupport 新增到內建的運算子族中。作者:Andrey Borodin 討論:https://postgres.tw/message-id/3520A18A-5C38-4697-A2E3-F3BDE3496CD5%40yandex-team.ru https://git.postgresql.org/pg/commitdiff/6f0bc5e1daf09686c526aa161da5336f7c94f4eb
Magnus Hagander 推送了
Tom Lane 推送了
修正了 SQL 函數結果強制轉換中斷裂的列表操作錯誤。自 commit 913bbd88d 以來,check_sql_fn_retval() 可以在產生 SQL 函數結果的 Query 中內嵌插入類型強制轉換步驟,或者產生一個新的頂層 Query 來執行強制轉換,如果就地修改 Query 的輸出不安全的話。然而,似乎後一種情況從未真正奏效,因為程式碼試圖將新的 Query 注入回傳遞給它的查詢列表中...這不是我們在“正常”執行 SQL 函數(不內嵌)時用於後續處理的列表。因此,我們最終沒有在執行時進行強制轉換,導致錯誤的結果或崩潰,具體取決於所涉及的資料類型。雖然回歸測試看起來足以涵蓋這個區域,但由於運氣不好,所有測試獨立 Query 路徑的測試案例都在檢查可內聯的情況(意外地沒有錯誤)或在執行時沒有操作的情況(例如,varchar 到 text),因此無法明顯地執行強制轉換的失敗。在 v13 之前不允許使用的情況可能也促成了沒有更早注意到這個問題。為了修正這個問題,請移除 Query 節點的單獨“扁平”列表,而是傳遞稍後要使用的實際雙層列表。我選擇在 check_sql_fn_statements() 中進行相同的更改,儘管沒有實際錯誤,只是這樣我們就不再需要那個資料結構了。這是一個 API 變更,functions.c 外部呼叫者所需的調整證明了這一點。在已發佈的分支中執行此操作有點可怕,但就我從快速搜尋中可以判斷,沒有這些函數的外部呼叫者(並且它們對於我們的 SQL 語言函數的語義來說足夠具體,以至於沒有明顯的理由需要任何擴充功能來呼叫它們)。無論如何,與之前的分支相比,v13 已經更改了 check_sql_fn_retval() 的 API。根據 pinker 的報告。向 v13 進行回溯,此程式碼來自該版本。討論:https://postgr.es/m/1603050466566-0.post@n3.nabble.com https://git.postgresql.org/pg/commitdiff/c8ab9701791e22f7a8e1badf362654db179c9703
修正了 src/bin/scripts/ 程式中的連線字串處理。當被告知處理所有資料庫時,clusterdb、reindexdb 和 vacuumdb 會透過將其 --maintenance-db 參數替換為目標資料庫的名稱來重新連線。如果該參數是一個 connstring(很久以前就允許使用,儘管我們在此修補程式之前未能記錄這一點),我們將失去它可能指定的任何其他選項,例如 SSL 或 GSS 參數,可能導致連線失敗。因此,這與 commit a45bc8a4f 在 pg_dump 和 pg_restore 中修正的錯誤相同。我們可以以相同的方式修正它,方法是使用 libpq 的規則來處理多個 "dbname" 參數,以單獨新增目標資料庫名稱。我選擇採用與該修補程式相同的重構方法,使用一個結構來處理需要傳遞給 connectDatabase 的命令列參數。(也許有一天我們可以統一這裡和 pg_dump/pg_restore 中非常相似的函數。)根據 Peter Eisentraut 對 bug #16604 的評論。回溯到所有支援的分支。討論:https://postgr.es/m/16604-933f4b8791227b15@postgresql.org https://git.postgresql.org/pg/commitdiff/8e5793ab60bba65ffaa0f2237b39c9580d8972c7
移除在 configure 之外建置 thread_test.c 的選項。從理論上講,可以進入 src/test/thread 並在那裡建置/執行此程式。實際上,自 96bf88d52 以來,這就無法工作了,並且在某些平台上可能更長(可能包括此測試可能感興趣的古老殘留物)。雖然修復這個損壞不會太難,但兩年來沒有人注意到這一事實表明維護此建置途徑沒有任何用處。讓我們擺脫它並規定 thread_test.c *只能*在 configure 中建置/使用。 鑑於該決定,將 thread_test.c 放在 config/ 下並完全擺脫 src/test/thread 是有意義的,所以我這樣做了。順便一提,更新了 src/test/README,它被一些不太新的子目錄新增所忽略。討論:https://postgr.es/m/227659.1603041612@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/8a2121185b26d7eb439860c7a96a08c0aa3c8508
修正 psql 中 \connect 指令處理連線字串的方式。psql 的 \connect 聲稱能夠重複使用先前的連線參數,但實際上它只會重複使用資料庫名稱、使用者名稱、主機名稱 (以及可能的主機位址,取決於版本) 和連接埠。這對於各種使用情境來說都是有問題的。特別是,pg_dump[all] 會發出 "\connect databasename" 指令,我們希望這些指令能夠重複使用所有其他參數。如果在 psql 執行時載入這樣的腳本,且該腳本最初具有 "-d connstring" 以及一些非預設參數,則這些其他參數將會遺失,可能導致連線失敗。(因此,這與提交 a45bc8a4f 和 8e5793ab6 中解決的錯誤類型相同,儘管細節大不相同。) 為了修正此問題,重新設計 do_connect(),使其使用 PQconninfo() 提取舊 PGconn 的所有屬性,然後替換該陣列中的個別屬性。如果我們不希望重複使用任何內容,則使用 PQconndefaults() 取得 libpq 的預設設定,並替換其中的條目,這樣我們就不需要為這兩種情況使用不同的程式碼路徑。這確實導致了額外的行為變更,適用於原始連線參數允許多個主機的情況,例如 "psql -h host1,host2",並且 \connect 請求允許重複使用主機設定。因為先前的程式碼依賴於 PQhost(),所以它只允許重新連線到最初選定的相同主機。雖然可以想到在某些情況下這是件好事,但在其他情況下則不然。此外,該行為似乎不符合最小驚奇原則,也沒有記錄在案;甚至不清楚這是否是故意的,因為該程式碼的歷史早於 libpq 中新增多主機支援的時間。因此,此修補程式滿足於放棄它,並按給定的方式重複使用主機清單。根據 Peter Eisentraut 在錯誤 #16604 上的評論。回溯修補到所有支援的分支。討論:https://postgr.es/m/16604-933f4b8791227b15@postgresql.org https://git.postgresql.org/pg/commitdiff/85c54287af56fe351b53913ea2b81e9d6145f964
清除 psql 的 \connect 指令中的一些令人不快的行為。檢查是否抱怨沒有舊連線來取得參數的檢查已經嚴重過時:當我們發明連線字串時,或者當我們發明 -reuse-previous 選項時,並沒有重新思考它。將其替換為一個檢查,如果 reuse-previous 處於活動狀態,並且我們缺乏要重複使用的舊連線,則會拋出錯誤。雖然這在減輕伺服器崩潰後的重新連線方面並沒有太大的進展,但至少它是一致的。如果使用者指定了連線字串以及其他參數 (根據文件,這是無效的),則額外的參數會被靜默地忽略。這似乎會造成很大的混淆,因此讓我們拋出語法錯誤。教導連線字串程式碼路徑在與舊式語法程式碼路徑相同的情況下重複使用舊連線的密碼,也就是說,如果我們正在重複使用參數,並且使用者名稱、主機/主機位址和連接埠的值沒有被更改。也記錄此行為,因為之前沒有提到。此外,簡化一些實作,產生兩個新的和有用的屬性:如果連線字串中有 "password=xxx",我們將使用它,而不是忽略它,並且預設情況下 (即,除了使用 --no-password),如果重複使用的密碼或連線字串密碼不起作用,我們將提示輸入密碼。如果重複使用的密碼不起作用,則先前的程式碼只會失敗。考慮到對這些問題的現場投訴很少,我不認為它們會上升到可回溯修補的錯誤修復的程度,而且在任何情況下,它們可能代表次要版本中不希望出現的行為變更。因此,沒有回溯修補。討論:https://postgr.es/m/235210.1603321144@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/94929f1cf6cb3ea070d0919d1303379b525a72a3
為 ECPG 字面查詢中的引號新增文件和測試。ECPG 的 PREPARE ... FROM 和 EXECUTE IMMEDIATE 可以選擇性地將目標查詢作為一個簡單的字面值,而不是更常用的字串變數引用。先前的文件說明這是一個 C 字串字面值,但在一個關鍵方面這是謊言:你不能在這樣的字面值中將資料雙引號寫成 \"。這是因為詞法分析器此時處於 SQL 模式,因此它會將雙引號字串解析為 SQL 識別符號,其中反斜線不是特殊的,因此 \" 結束了字面值。我研究過使其按照文件說明的方式工作,但在正確的點讓詞法分析器切換行為介於非常困難和不可能之間。這真的不值得麻煩,因為這些情況幾乎沒有用:如果你有一個固定的 SQL 語句要執行或準備,你最好將它寫成直接的 EXEC SQL,從而節省了將其轉換為字串字面值的麻煩,並有機會進行編譯時 SQL 語法檢查。相反,讓我們只記錄 (並測試) 在這種情況下將雙引號寫成八進位逸出 (\042) 的解決方法。這裡沒有程式碼行為變更,因此原則上可以回溯修補,但這是一個如此小的案例,我懷疑它是否值得麻煩。根據 1250kv 的報告。討論:https://postgr.es/m/673825.1603223178@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/c16a1bbcf498f0aa053a3e55008f57d7f67357dd
避免在 ECPG 字串中過早地去除引號。如果你在 EXEC SQL 指令中寫入字面值 'abc''def',它將以 'abc'def' 的形式出現,從而在後端觸發語法錯誤。同樣,"abc""def" 被簡化為 "abc"def",這是帶引號識別符號的錯誤語法。原因是詞法分析器認為它應該只發出一個引號,而它真正應該做的是保持字串原樣。也新增一些文件和測試案例。雖然這顯然是一個錯誤,但我擔心使用者不會喜歡在次要版本中更改它。有些人很可能正在通過對受影響的引號應用額外的加倍來解決它,例如 sql/dyntest.pgc 一直在做的事情。根據對來自 1250kv 的報告的調查,儘管這並不完全是他/她所說的。討論:https://postgr.es/m/673825.1603223178@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/3dfb1942d9b8748b93094a430289e2f7f3b3ae0d
將我們的時區庫副本與 IANA 版本 tzcode2020d 同步。這裡根本沒有功能變更,但我很好奇這個變更是否能成功阻止 Coverity 關於無用 strcmp() 的警告,該警告出現在之前的更新中。討論:http://mm.icann.org/pipermail/tz/2020-October/029370.html https://git.postgresql.org/pg/commitdiff/c5054da0d7ee59a93ca6d7f7fc669ef0210dbad3
將時區資料檔案更新至 tzdata release 2020d。巴勒斯坦的日光節約時間 (DST) 法規變更,僅提前 120 小時通知。同時也修正了一些巴勒斯坦的歷史資料。https://git.postgresql.org/pg/commitdiff/7d6d6bce43c60bb7b77237e2cc6ab845646b911f
修正增量排序的 EXPLAIN 輸出中損壞的 XML 格式。增量排序使用資料的 ExplainCloseGroup 引數與對應的 ExplainOpenGroup 不匹配。這只影響 XML 格式的輸出,這可能就是我們沒有注意到的原因。Daniel Gustafsson,根據 Frits Jalvingh 提出的錯誤 #16683。討論:https://postgr.es/m/16683-8005033324ad34e9@postgresql.org https://git.postgresql.org/pg/commitdiff/87a174c0e77eed0bec7d53ef6d470d60335f6444
修正新 amcheck 測試中的可移植性問題。commit 866e24d47 增加的測試由於未考慮位元組序,因此在大端機器上失敗。修正此問題。同時,改善了一些小的表面問題,例如透過 perltidy 執行它。Mark Dilger 討論:https://postgr.es/m/30B8E99A-2D9C-48D4-A55C-741C9D5F1563@enterprisedb.com https://git.postgresql.org/pg/commitdiff/860593ec3bd15e8969effdfcb5cbd98c561dd722
允許 psql 在連線中斷後重複使用連線參數。不要立即 PQfinish 掉已斷開的連線,而是將其儲存起來,以便我們仍然可以提取其參數以用於 \connect 嘗試。(這是可行的,因為 PQconninfo 不關心 PGconn 是否處於 CONNECTION_BAD 狀態。)這允許開發人員在資料庫崩潰並重新啟動後,只需使用 \c 重新連線。很想使用相同的方法,而不是在失敗的非互動式 \connect 命令後關閉舊連線。但是,這不是很安全:考慮一個包含以下內容的腳本:\c db1 user1 live_server \c db2 user2 dead_server \c db3 該腳本期望連線到 dead_server 上的 db3,但是如果我們重複使用第一個連線的參數,那麼它可能會成功連線到 live_server 上的 db3。這將違背不讓腳本意外地針對錯誤的資料庫執行命令的目標。討論:https://postgr.es/m/38464.1603394584@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/1b62d0fb3e50ede570d0d4e4a2be69d5645b48a7
修正新 amcheck 程式碼中的更多可移植性問題。verify_heapam() 在使用元組行指標之前,沒有小心地進行健全性檢查,導致在對對齊要求嚴格的架構上出現 SIGBUS 錯誤。修正此問題,並新增更多測試覆蓋率。Mark Dilger,我做了一些調整 討論:https://postgr.es/m/30B8E99A-2D9C-48D4-A55C-741C9D5F1563@enterprisedb.com https://git.postgresql.org/pg/commitdiff/321633e17b07968e68ca5341429e2c8bbf15c331
修復 ecpg 在 Windows 上 pthread_once() 模擬中的古老錯誤。在執行初始化函數之後,我們絕對不能設定 "done" 標誌。否則,其他執行緒可能會在初始化真正完成之前,在初始未鎖定的測試中失敗。已經觀察到這種情況導致 ecpg 的執行緒/描述符測試出現罕見故障,並且它可能會在執行緒化的 ECPG 應用程式中導致其他類型的異常行為,因為 ecpglib 在多個位置依賴於 pthread_once()。由我診斷並修復,基於 Alexander Lakhin 的調查。向所有支援的分支進行回溯移植(此錯誤可以追溯到 2007 年)。討論:https://postgr.es/m/16685-d6cd241872c101d3@postgresql.org https://git.postgresql.org/pg/commitdiff/21d36747d4fafe16539a0c55ebb91a01e4053e3c
修正回傳 OLD 的 BEFORE ROW UPDATE 觸發器的邊角案例。如果舊行有任何應從相關聯的元組描述符中檢索的「遺失」屬性,則會發生錯誤,因為觸發器結果會直接推入到缺少遺失屬性資料的執行器槽中。值得注意的是,CHECK 約束驗證會錯誤地將這些欄位視為 NULL,RETURNING-list 的評估也是如此。透過強制擴展元組來解決此問題,然後將其傳遞給觸發函數。(我認為將遺失的屬性資料放入元組約束中是一個根本性的錯誤設計,系統的許多部分認為它是可選的。但我們可能已經陷入困境,並且必須繼續應用 band-aids,因為我們發現了其他具有類似問題的地方。)回溯移植到 v12。v11 也會存在此問題,除非 commit 920311ab1 已經應用了類似的 band-aid。雖然在更多情況下強制擴展似乎不是真正必要的,因此這不是直接等效的修復。Amit Langote,我做了一些表面上的更改 討論:https://postgr.es/m/16644-5da7ef98a7ac4545@postgresql.org https://git.postgresql.org/pg/commitdiff/ba9f18abd3650e385e9a35df7145a7c38af17e92
在 INSERT/UPDATE 中,使用表格的真實元組描述符作為目標。以前,ExecInitModifyTable 依賴於 ExecInitJunkFilter,然後是 ExecCleanTypeFromTL,從查詢 tlist 建立目標描述符。雖然我們剛剛檢查了(在 ExecCheckPlanOutput 中)tlist 產生相容的輸出,但這並不能很好地替代從 relcache 獲得的關係的實際元組描述符。首先,丟棄的欄位不會被正確地標記為 attisdropped;我們能夠長期擺脫這種狀況有點令人驚訝。但真正令人擔憂的原因是,使用表格的描述符意味著該槽將具有正確的 attrmissing 資料,從而允許我們恢復 commit ba9f18abd 的 klugy 修復。(此 commit 撤消了該 commit 在 trigger.c 中的更改,但保留了新的測試案例。)因此,我們可以以更少的週期而不是更多的週期來解決偽造觸發器元組問題。由於這沒有修復任何其他錯誤,並且它似乎比 ba9f18abd 的窄修復更容易產生意外的副作用,因此不進行回溯移植。討論:https://postgr.es/m/16644-5da7ef98a7ac4545@postgresql.org https://git.postgresql.org/pg/commitdiff/20d3fe9009ddbbbb3da3a2da298f922054b43f8c
文件:改進關於如何使用我們的程式碼覆蓋基礎結構的說明。對在子目錄中執行 "make coverage" 的引用有點模糊,因此請闡明執行此操作時會發生什麼。也做一些草率的複製編輯。根據 Peter Smith 的一個問題。討論:https://postgr.es/m/CAHut+Pu0r3AjRSyu5E0v2-zRj8r24OSrkWs3fEBxOuaw1i8DKA@mail.gmail.com https://git.postgresql.org/pg/commitdiff/8d132b2850d4c95ed5666a09b295dea645bbc884
修正存在常數時,外部鍵選擇性的估算問題。get_foreign_key_join_selectivity() 會尋找使外部鍵約束兩側相等的 JOIN 子句。然而,如果我們有類似 "WHERE fktab.a = pktab.a and fktab.a = 1" 的查詢,它將找不到任何這樣的 JOIN 子句,因為 equivclass.c 將給定的子句替換為 "fktab.a = 1 and pktab.a = 1",這可以在掃描層級強制執行,導致在 JOIN 層級無需對欄位 "a" 執行任何操作。我們可以輕鬆修正這個預期,但隨之而來的是一個新問題:應用基於外部鍵的選擇性規則會產生一個 rowcount 低估,因為我們實際上是在重複計算 "fktab.a = 1" 子句的選擇性。因此,我們必須從估算值中抵銷該選擇性。為了修正此問題,我們重構了 process_implied_equality(),使其能夠將新的 RestrictInfo 傳回給 equivclass.c 中的呼叫者,從而允許將產生的 "fktab.a = 1" 子句儲存在 EquivalenceClass 的 ec_derives 清單中。這樣,當我們需要調整外部鍵選擇性估算時,就可以輕鬆地挖掘出相關的 RestrictInfo。(同時,我們還可以移除對 initialize_mergeclause_eclasses() 的昂貴使用,以便設定新的 RestrictInfo 的 left_ec 和 right_ec 指標。equivclass.c 的程式碼可以幾乎免費地設定這些指標。)這顯然是一個錯誤修正,但我猶豫是否要將其反向移植,首先是因為擴充套件存在一些 API/ABI 風險,其次是因為我們通常不願意在穩定分支中破壞計畫選擇。根據 Sigrid Ehrenreich 的報告。討論:https://postgr.es/m/1019549.1603770457@sss.pgh.pa.us 討論:https://postgr.es/m/AM6PR02MB5287A0ADD936C1FA80973E72AB190@AM6PR02MB5287.eurprd02.prod.outlook.com https://git.postgresql.org/pg/commitdiff/ad1c36b0709e47cdb3cc4abd6c939fe64279b63f
不要在 pg_proc.dat 中使用自訂的 OID 符號。我們已經有了一個用於內建函數的 OID 巨集的完善慣例,因此建立自訂符號只會引入不必要的慣例偏差。移除了一個偷偷加入的案例,並在 genbki.pl 中新增一個錯誤檢查,以避免未來出現類似情況。儘管這影響了 pg_proc.dat,但由於實際的目錄資料沒有變更,因此無需變更 catversion。John Naylor 討論:https://postgr.es/m/CAFBsxsHpCbjfoddNGpnnnY5pHwckWfiYkMYSF74PmP1su0+ZOw@mail.gmail.com https://git.postgresql.org/pg/commitdiff/36b93121436cbbf357974144068c23bac75154fa
在查詢重寫器中,而不是在解析器中計算 extraUpdatedCols。在解析時執行此操作是不安全的,因為將產生的欄位新增到表格不會使儲存的、包含對表格 UPDATE 的規則失效……但現在可能存在在建立規則時不存在的相依產生的欄位。這也修正了 rewriteTargetView 在轉換可更新檢視表上的 UPDATE 時未能更新 extraUpdatedCols 的疏忽。(由於新的計算位於其下游,因此 rewriteTargetView 實際上不需要執行任何操作;但在之前,存在一個可證明的錯誤。)在 v13 和 HEAD 中,這會導致容易看到的錯誤,因為(自 commit c6679e4fc 以來)我們不會重新計算未在 extraUpdatedCols 中列出的產生的欄位。在 v12 中,此位元圖主要用於觸發器觸發決策,因此只有當觸發器關心產生的欄位是否已更新時,您才會注意到問題。我早在五月就抱怨過這個問題,但後來忘記了,直到 Michael Paul Killian 的錯誤 #16671 重新提出了這個問題。反向移植到引入此欄位的 v12。如果現有的儲存規則包含任何 extraUpdatedCols 值,它們將被忽略,因為重寫器將覆蓋它們,因此即使對於現有規則,該錯誤也將得到修正。(但請注意,如果有人更新到 13.1 或 12.5,儲存一些包含對具有產生的欄位的表格進行 UPDATE 的規則,然後降級到之前的次要版本,他們可能會觀察到與此修補程式修正的問題類似的問題。這似乎不太可能,不值得花費大量精力來修正。)討論:https://postgr.es/m/10206.1588964727@sss.pgh.pa.us 討論:https://postgr.es/m/16671-2fa55851859fb166@postgresql.org https://git.postgresql.org/pg/commitdiff/ad77039fad0f4128b0e4a05ddbf5dbc3ab5f3fa4
在 psql 的 evaluate_backtick() 中,對 popen() 使用 "r" 模式。在幾乎所有其他地方,我們在 popen() 呼叫中使用普通的 "r" 或 "w" 模式(例外情況是針對 COPY 資料)。這個被忽略了(可能是因為它隱藏在 ".l" flex 檔案中?),但它正在使用 PG_BINARY_R。Kensuke Okamura 在錯誤 #16688 中抱怨說,當從反引號結果字串中剝離尾隨換行符時,我們無法剝離 \r。這確實是真的,但我們也無法乾淨地轉換嵌入的 \r\n,這也似乎是不希望的。修正 popen() 模式似乎是處理這個問題的最佳方法。它已經存在很長時間了,因此反向移植到所有受支援的分支。討論:https://postgr.es/m/16688-c649c7b69cd7e6f8@postgresql.org https://git.postgresql.org/pg/commitdiff/66f8687a8ff867f656de81e367314604d29dbd59
文件:清理 verify_heapam() 文件。我最初的目的是透過移除範例輸出以抑制 PDF 建置警告,但最終做了更多:更正了函數簽名中的事實錯誤,將一堆通用的手勢動作移到「有效使用 amcheck」部分,這似乎是更好的位置,並稍微改進了措辭和標記。討論:https://postgr.es/m/732904.1603728748@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/4c49d8fc15eeb1dc69b0ddb2d986a1884a5d7f5f
文件:清理 pg_relation_check_pages() 文件。Commit f2b883969 沒有收到關於記錄內建函數的表格的新格式樣式的備忘錄。我注意到是因為一個關於超寬表格的 PDF 建置警告。https://git.postgresql.org/pg/commitdiff/b787d4ce6d910080065025bcd5f968544997271f
同樣,不要在 pg_type.dat 中使用自訂的 OID 符號。根據與 commit 36b931214 相同的推理,禁止在 pg_type 以及 pg_proc 中使用自訂的 oid_symbol 巨集,以便我們始終依賴 genbki.pl 產生的可預測的巨集名稱。我們確實繼續授予 CASHOID 和 LSNOID 名稱祖父地位,儘管這些名稱現在被認為是首選名稱 MONEYOID 和 PG_LSNOID 的已棄用的別名。這是因為可能有客戶端程式碼使用舊名稱,而這種簡潔主義似乎不太值得破壞客戶端程式碼。可能還有一個授予 EVTTRIGGEROID 祖父地位的案例,因為外部維護的 PL 可能會引用該符號。但是將此類參考重新命名為 EVENT_TRIGGEROID 似乎不是特別繁重的工作 --- 我們在每個主要版本中都會進行更重要的後端 API 變更。目前我沒有新增它,但如果有反對意見,我們可以重新考慮。此處變更的其他名稱似乎不太可能有任何外部用途。與之前一樣,如果有人抱怨,我們可以新增別名巨集,但目前我沒有新增。同樣,不需要變更 catversion。John Naylor 討論:https://postgr.es/m/CAFBsxsHpCbjfoddNGpnnnY5pHwckWfiYkMYSF74PmP1su0+ZOw@mail.gmail.com https://git.postgresql.org/pg/commitdiff/f90149e6285aaae6b48559afce1bd638ee26c33e
在 DST 轉換期間穩定 timetz 測試。我在 commit a9632830b 中新增的 timetz 測試案例無意中對 PST8PDT 時區中是否啟用了 DST 非常敏感。因此,它們將在本週末開始失敗,正如 Bernhard M. Wiedemann 在錯誤 #16689 中報告的那樣。幸運的是,DST 意識對於這些測試案例的目的並不重要,因此我們可以強制它們都使用 PDT(DST 時間),以保持結果的穩定性。反向移植到 v10,就像之前的修補程式一樣。討論:https://postgr.es/m/16689-57701daa23b377bf@postgresql.org https://git.postgresql.org/pg/commitdiff/4a071afbd056282746a5bc9362e87f579a56402d
文件:澄清 pg_constraint.convalidated 的描述。Jimmy Angelakos 討論:https://postgr.es/m/CABgVKCW_zPnvFXn24FTF0299_yU6+1p6JRUc0xpiZFWEXH1_jg@mail.gmail.com https://git.postgresql.org/pg/commitdiff/b401fa206d446f224ec4760f21e0a351816c97b3
修正 check_new_partition_bound() 中的斷言失敗。commit 6b2c4e59d 過於自信地認為不會從 partition_range_bsearch() 看到負的 cmpval 結果。調整程式碼以應對這種情況。由 Amul Sul 報告並提供修補程式;我做了一些額外的潤飾。討論:https://postgr.es/m/CAAJ_b97WCO=EyVA7fKzc86kKfojHXLU04_zs7-7+yVzm=-1QkQ@mail.gmail.com https://git.postgresql.org/pg/commitdiff/970c05057593c2f5919a69b43fd917c4fa86f51c
避免如果錯誤結果缺少 SQLSTATE 時出現空指標解引用。雖然從後端收到的錯誤結果應該始終具有 SQLSTATE 欄位,但由 libpq 產生的錯誤結果不會,這使得此程式碼容易在例如連接突然中斷後崩潰。Coverity 指出。commit 403a3d91c 中的疏忽。回溯修補到 9.5,因為那時是。
https://git.postgresql.org/pg/commitdiff/7f4235032f0d75ea1ad29b192d57fee3d8fe533eÁlvaro Herrera 推送
討論:https://postgr.es/m/20201016235925.GA29829@alvherre.pgsql https://git.postgresql.org/pg/commitdiff/bbb927b4db9b3b449ccd0f76c1296de382a2f0c1
在 PostgresNode::backup() 中使用快速檢查點。應該會讓測試速度更快一些。
https://git.postgresql.org/pg/commitdiff/831611b11c34ed0066633864f42ff67a10286aee在 LOCK TABLE 中接受任何種類的關係。LOCK TABLE 只能鎖定資料表和檢視表的限制非常隨意,因為底層機制可以鎖定任何關係類型。刪除此限制,以便 pg_dump 之類的程式可以鎖定它們感興趣的所有關係,防止可能導致轉儲在花費大量精力後失敗的結構描述變更。回溯修補到 9.5。作者:Álvaro Herrera alvherre [AT] alvh.no-ip.org 審閱者:Tom Lane tgl [AT] sss.pgh.pa.us 報告者:Wells Oliver wells.oliver [AT] gmail.com 討論:https://postgr.es/m/20201021200659.GA32358@alvherre.pgsql https://git.postgresql.org/pg/commitdiff/59ab4ac32460a6a93b665f4e487d7ff64979ba4d
pg_dump:鎖定所有關係,而不僅僅是普通資料表。現在 LOCK TABLE 可以接受任何關係類型,請獲取要轉儲的所有關係的鎖定。這樣可以防止結構描述變更或死鎖錯誤,這些錯誤可能導致轉儲在花費大量精力後失敗。已測試伺服器是否具有此功能,如果沒有,則禁用該功能,以便修補後的 pg_dump 在連接到未修補的伺服器時不會失敗。回溯修補到 9.5。作者:Álvaro Herrera alvherre [AT] alvh.no-ip.org 審閱者:Tom Lane tgl [AT] sss.pgh.pa.us 報告者:Wells Oliver wells.oliver [AT] gmail.com 討論:https://postgr.es/m/20201021200659.GA32358@alvherre.pgsql https://git.postgresql.org/pg/commitdiff/403a3d91c841beabf3efd7bffddb47a2bce4481f
Robert Haas 推送
擴展 amcheck 以檢查堆積頁面。Mark Dilger,由 Peter Geoghegan、Andres Freund、Álvaro Herrera、Michael Paquier、Amul Sul 以及我審閱。我進行了一些最後時刻的潤飾。討論:http://postgr.es/m/12ED3DA8-25F0-4B68-937D-D907CFBF08E7@enterprisedb.com https://git.postgresql.org/pg/commitdiff/866e24d47db1743dfcff5bd595b57e3a143f2cb1
嘗試避免關於使用未初始化的 fxid 的編譯器警告。Mark Dilger,我刪除了幾個多餘的分號。討論:http://postgr.es/m/2A7DA1A8-C4AA-43DF-A985-3CA52F4DC775@enterprisedb.com https://git.postgresql.org/pg/commitdiff/8bb0c9770e80fa79f15b27af8f3c3f2833225aa3
Bruce Momjian 推送
doc: 使 blooms 文件符合實際情況。平行執行變更了 bloom 查詢的執行方式,因此更新 EXPLAIN 輸出,並重新建構文件以使其更清晰和準確。由 Daniel Westermann 報告。討論:https://postgr.es/m/ZR0P278MB0122119FAE78721A694C30C8D2340@ZR0P278MB0122.CHEP278.PROD.OUTLOOK.COM 作者:Daniel Westermann 和我。回溯修補到:9.6
https://git.postgresql.org/pg/commitdiff/e9661f2b0f3310d8bacc3f0802b309f599300cfbdoc: 簡化函數錯誤影響的措辭。由 bob.henkel@gmail.com 報告。討論:https://postgr.es/m/160324449781.693.8298142858847611071@wrigleys.postgresql.org 回溯修補到:9.5
https://git.postgresql.org/pg/commitdiff/2f17fe431860fc434084d99d8b789e6ec7e6977bdocs: 移除對 src/tools/thread 的參考。此目錄和獨立建構執行緒測試的功能已在 commit 8a2121185b 中移除。由 e.indrupskaya@postgrespro.ru 報告。討論:https://postgr.es/m/160379609706.24746.7506163279454026608@wrigleys.postgresql.org 回溯修補到:9.5
https://git.postgresql.org/pg/commitdiff/4066b642909176aede03b6c64d29734ce2a34716Makefile 註解:移除對 tools/thread/thread_test 的參考。您不能再單獨編譯 thread_test,並且位置也已移動。由 Tom Lane 報告。討論:https://postgr.es/m/1062278.1603819969@sss.pgh.pa.us 回溯修補到:9.5
https://git.postgresql.org/pg/commitdiff/8e5d1aef8eed26977739b662cddcea2de5efe834Andres Freund 推送
集中式決定暫存表的水平線,修正因資料傾斜造成的錯誤。這修正了一個邊緣案例中的錯誤,在該案例中,對於暫存表,heap_page_prune() 可能會得到與 heap_vacuum_rel() 不同的水平線。這可能會觸發類似 "ERROR: cannot freeze committed xmax ..." 的錯誤。這個錯誤是由於 a7212be8b9e "Set cutoff xmin more aggressively when vacuuming a temporary table." 與 dc7420c2c92 "snapshot scalability: Don't compute global horizons while building snapshots." 互動所造成的。問題的原因是 lazy_scan_heap() 假設它的 HeapTupleSatisfiesVacuum() 呼叫會返回 HEAPTUPLE_DEAD 的唯一原因是 tuple 是一個 HOT tuple,或者 tuple 的插入交易自 heap_page_prune() 呼叫以來已中止。但在 a7212be8b9e 之後,對於暫存表,在其他情況下也是可能的,因為在 dc7420c2c92 之後,heap_page_prune() 使用了不同的可見性測試。修復方法很簡單:將暫存表的特殊情況邏輯從 vacuum_set_xid_limits() 移到 dc7420c2c92 中引入的基礎結構中。這確保了用於修剪的水平線至少與 lazy_scan_heap() 使用的水平線一樣激進。用於暫存表的具體水平線與 dc7420c2c92 中的邏輯略有不同,但應始終與以前一樣激進(請參閱註釋)。集中式邏輯 procarray.c 的一個顯著好處是,現在對於暫存表更激進的水平線不僅適用於 VACUUM,也適用於例如 HOT 修剪和 nbtree killtuples 邏輯。因為 vacuum_set_xid_limits() 不再需要 isTopLevel,所以我撤消了 a7212be8b9e 中的相關更改。此提交還添加了一個隔離測試,確保更激進的暫存表清理和修剪能繼續工作。Debugged-By: Amit Kapila amit.kapila16 [AT] gmail.com Debugged-By: Tom Lane tgl [AT] sss.pgh.pa.us Debugged-By: Ashutosh Sharma ashu.coek88 [AT] gmail.com Author: Andres Freund andres [AT] anarazel.de Discussion: https://postgr.es/m/20201014203103.72oke6hqywcyhx7s@alap3.anarazel.de Discussion: https://postgr.es/m/20201015083735.derdzysdtqdvxshp@alap3.anarazel.de https://git.postgresql.org/pg/commitdiff/94bc27b57680b4e757577e3f5b65dc32f96d33c1
修正後端啟動期間錯誤的資料表水平線計算。當在設定 MyDatabaseOid 之前呼叫 ComputeXidHorizons() 時,例如因為在 InitPostgres() 期間遇到共享關係中的死記錄,則用於正常表的水平線計算過於激進,忽略了所有連接到資料庫的後端。在資料表中的後續修剪期間,仍然可能使用過於激進的水平線,可能導致仍然需要的 tuple 被移除。這不好。這是 dc7420c2c92 中的一個錯誤,如果 force_parallel_mode 設定為 regress 運行,則 94bc27b5768 中添加的測試使其可見。在這種情況下,該錯誤會可靠地被觸發,因為 "pruning_query" 在平行工作程序中運行,並且該平行工作程序的啟動很可能在 pg_database 中遇到死記錄。修復方法很簡單:如果 MyDatabaseId 尚未知,則計算更保守的資料表水平線。Author: Andres Freund Discussion: https://postgr.es/m/20201029040030.p4osrmaywhqaesd4@alap3.anarazel.de https://git.postgresql.org/pg/commitdiff/1c7675a7a4265064a2c8e1ed02b2c042c2521664
Noah Misch 推送了
在平行工作程序上重現 debug_query_string\=\=NULL。某些背景工作程序在 debug_query_string\=\=NULL 時啟動平行查詢,此時他們嘗試 strlen(NULL) 並因 SIGSEGV 而死亡。較舊的 debug_query_string 觀察者允許 NULL,因此也在這些較新的觀察者中執行相同的操作。回溯到 v11,其中 commit 7de4a1bcc56f494acbd0d6e70781df877dc8ecb5 引入了第一個。Discussion: https://postgr.es/m/20201014022636.GA1962668@rfd.leadboat.com https://git.postgresql.org/pg/commitdiff/f90e80b9138355a51d2d5b5b63e1f89c4ba53325
在 worker_spi 中設定 debug_query_string。這使 elog.c 發出字串,這對於執行 SQL 字串的背景工作程序來說是一個好習慣。Reviewed by Tom Lane. Discussion: https://postgr.es/m/20201014022636.GA1962668@rfd.leadboat.com https://git.postgresql.org/pg/commitdiff/d2246cde825e4e1a85408390c66367b85b51a233
Peter Eisentraut 送出了一個修補程式,以新增 default_result_formats GUC,該 GUC 指定在擴充查詢協定中傳回的列的預設結果格式(依資料類型),當 Bind 訊息中未指定任何結果格式時。
Álvaro Herrera 送出了另一個修訂版的修補程式,以將追蹤功能新增到 libpq。
Julien Rouhaud 送出了兩個修訂版的修補程式,以處理 pg_trgm 中的 = 運算子。
Álvaro Herrera 送出了另一個修訂版的修補程式,以將批次和管線支援新增到 libpq。
Craig Ringer 送出了一個修補程式,以報告 libpq 版本和配置。
Jakub Wartak 送出了兩個修訂版的修補程式,以將 "IO read time" 日誌訊息新增到 autoanalyze。
Alexander Korotkov 和 Andrey Borodin 交換了修補程式,以在 GetMultiXactIdMembers 中使用共享鎖,而不是獨佔控制鎖,用於偏移量和成員,使 MultiXact 本機快取大小可配置,新增條件變數以在邊緣情況下等待下一個 MultXact 偏移量,並新增 GUC 以調整 MultiXact SLRUs。
Pavel Borisov 送出了另一個修訂版的修補程式,透過重新排序欄位使其能夠更有效地執行 GROUP BY。
Peter Geoghegan 送出了另一個修訂版的修補程式,以新增 sort_template.h 用於建立快速排序功能,並將刪除重複資料功能新增到 nbtree。
Michaël Paquier 送出了另一個修訂版的修補程式,以修復基本備份中零頁標頭的總和檢查碼驗證。
Ajin Cherian 和 Peter Smith 交換了修補程式,以實作兩階段交易的邏輯解碼。
Zhenghua Lyu 送出了一個修補程式,以考慮在 get_variable_numdistinct 中 stanullfrac 為 1.0 的情況。
Konstantin Knizhnik 送出了另外五個修訂版的修補程式,以實作 libpq 中的壓縮。
Justin Pryzby 送出了一個修補程式,以移除已棄用的 v8.2 包含運算子。
Peter Eisentraut 送出了另一個修訂版的修補程式,以支援為語言 SQL 撰寫 CREATE FUNCTION 和 CREATE PROCEDURE 語句,其函數主體符合 SQL 標準並且可移植到其他實作。
Ibrar Ahmed 送出了另一個修訂版的修補程式,以實作時間 PK/FK 刪除和更新。
Justin Pryzby 送出了另一個修訂版的修補程式,讓 pg_dump 輸出子觸發器的 DISABLE/ENABLE,如果它們的狀態與其父觸發器不符。
Arseny Sher 送出了一個修補程式,以修復釋放後使用(use-after-free)的錯誤。
Amit Kapila 送出了一個修補程式,以對 pg_stat_replication_slots 視窗中溢出計數器的描述進行一些小的改進。
Dilip Kumar 送出了另外三個修訂版的修補程式,以實作表格的自定義壓縮方法以及更改相同方法的方式。
John Naylor 提交了兩個修訂版的 patch,以使用內建函式 heap_tableam_handler() 的標準符號。
Michaël Paquier 提交了另一個修訂版的 patch,以在後端啟用線上檢查總和驗證。
Greg Nancarrow 提交了另外兩個修訂版的 patch,以在安全的情況下為 "INSERT INTO ... SELECT ..." 啟用並行 SELECT,並在安全的情況下為 "INSERT INTO ... SELECT ..." 啟用並行 INSERT 和/或 SELECT。
Masahiko Sawada 和 Bertrand Drouvot 交換了 patch,以記錄備用伺服器復原衝突的等待。
Vigneshwaran C 提交了另一個修訂版的 patch,以並行化 COPY 的部分。
Daniel Gustafsson 提交了另外四個修訂版的 patch,以支援 NSS 作為 libpq TLS 後端。
Michaël Paquier、Fabrízio de Royes Mello 和 Nikolay Samokhvalov 交換了 patch,以在建立運算式索引後新增有關 ANALYZE 的重要資訊。
Justin Pryzby 提交了一個 patch,用於為分割表實作 CLUSTER,在叢集分割索引的子索引上保留 indisclustered,並在附加未叢集索引時使 indisclustered 失效。
Justin Pryzby 提交了一個 WIP patch,用於為分割索引實作 DROP INDEX CONCURRENTLY。
Hayato Kuroda 提交了一個 patch,以修復 pgbench 中的一個問題,該問題導致查詢在建立連線之前觸發,方法是新增對 pthread_barrier_wait() 的呼叫。
Hou Zhijie 提交了一個 patch,以增強 libpq 以支援用於非熱備份的多個主機。
Pavel Borisov 提交了一個 patch,以修復在 OSX 上執行 Valgrind 時的錯誤。
Amul Sul 提交了另一個修訂版的 patch,以實作 ALTER SYSTEM READ {ONLY|WRITE}。
Justin Pryzby 提交了另一個修訂版的 patch,以確保所有 pg_ls_* 函式都顯示目錄和共享檔案集。
Tsutomu Yamada 提交了四個修訂版的 patch,以將擴充統計資訊清單新增到 psql 的 \dX 和 \dX+。
Kirk Jamison 提交了另一個修訂版的 patch,以使用 dlist 使刪除關係緩衝區更有效率。
Bruce Momjian 提交了另外兩個修訂版的 patch,以實作金鑰管理系統。
Xiao Bai Yan 提交了另一個修訂版的 patch,以擴充共享 tuple 儲存並新增批次儲存模組,並且順便一提,在取得下一個讀取頁面時,使用原子操作代替 LWLock 進行共享 tuple 儲存,並使用它來實作使用批次雜湊彙總的並行 distinct union 彙總和群組集支援。
Amit Kapila 提交了另一個修訂版的 patch,以追蹤來自 ReorderBuffer 的變更串流的統計資訊。
John Naylor 提交了一個 patch,以禁止自訂 pg 類型符號。
Heikki Linnakangas 和 Andres Freund 交換了 patch,以在規劃器中對彙總和轉換函式進行重複資料刪除。
Amit Langote 提交了另一個修訂版的 patch,以在 nodeModifyTable.c 中重新排列分割區路由分層。
Takamichi Osumi 使禁用 WAL 日誌記錄以加速資料載入成為可能。
John Naylor 提交了四個修訂版的 patch,以記錄 pg_settings 視窗不顯示自訂選項的事實。
Bharath Rupireddy 提交了另外兩個修訂版的 patch,新增了兩個新函式:pg_terminate_backend(pid, wait, timeout),它終止並等待或超時給定的後端;以及 pg_wait_backend(pid, timeout),它檢查具有給定 PID 的後端是否存在,並等待或超時直到它消失。
Euler Taveira de Oliveira 提交了一個 patch,用於控制崩潰後暫存檔的刪除。
Vigneshwaran C 提交了四個修訂版的 patch,以新增包含 GSS 身份驗證、加密和主體資訊的日誌訊息。
Noah Misch 提交了另一個修訂版的 patch,以防止過多的 SimpleLruTruncate() 刪除,並在 SimpleLruTruncate() 中減少 unlink,作為防止錯誤的保險措施。
Takamichi Osumi 提交了另一個修訂版的 patch,以實作 CREATE OR REPLACE TRIGGER。
Justin Pryzby 提交了另一個修訂版的 patch,用於 pg_dump:允許獨立還原子分割區,即使父分割區不存在,或者缺少/不相容的欄位。
Justin Pryzby 提交了一個 patch,以淘汰 pg_standby 和 pg_archivecleanup。
Masahiko Sawada 提交了一個 PoC patch,其中新增了一些 xx_vacuum GUC 參數來控制記錄 TIDs 的方法。
Michaël Paquier 提交了另一個修訂版的 patch,以修復基本備份中的頁面驗證。
Masahiro Ikeda 提交了另一個修訂版的 patch,以將統計資訊新增到 pg_stat_wal 視窗。
Justin Pryzby 提交了另一個修訂版的 patch,以允許 INSERT SELECT 使用 BulkInsertState,並使用相同的方法使 INSERT SELECT 使用 multi_insert。
Daniel Gustafsson 提交了另一個修訂版的 patch,以清理 contrib/sslinfo 和 OpenSSL 錯誤處理。
Amit Langote 提交了另一個修訂版的 patch,以使繼承樹的更新/刪除更好地擴展。
Tomáš Vondra 和 James Coleman 交換了 patch,以修復 get_useful_pathkeys_for_relation 對於 join 下方的揮發性 exprs 的問題,並新增注釋以解釋哪些投影是不必要的。
Thomas Munro 提交了另外兩個修訂版的 patch,以實作定序版本控制。
Amit Langote 提交了另一個修訂版的 patch,以從 ExecInitModifyTable 呼叫 BeginDirectModify,並延遲初始化結果關係資訊。
Amit Langote 提交了另一個修訂版的 patch,以修復 UPDATE 移動 tuple 時的 RETURNING 錯誤。
Ashutosh Bapat 提交了另外兩個修訂版的 patch,以枚舉邏輯複製訊息動作。
Jimmy Angelakos 提交了一個 patch,以闡明 pg_constraint 中 convalidated 的措辭。
John Naylor 提交了一個 patch,以記錄 REVOKE ROLE 上與標準的偏差。
Andrey Borodin 提交了另一個修訂版的 patch,為 gist_btree 類型的 GiST 建置新增排序支持。
Tomáš Vondra 提交了另一個修訂版的 patch,以擴展範圍類型運算符以處理元素。
Heikki Linnakangas 提交了一個 WIP patch,以按區塊查找 COPY 中的所有行尾。
Jürgen Purtz、Erik Rijkers 和 Justin Pryzby 交換了 patch,以向教學新增一個新章節。
Tomáš Vondra 提交了另一個修訂版的 patch,以將額外的統計資訊新增到 Nested Loop 的 explain。
Justin Pryzby 提交了另一個修訂版的 patch,以修復錯字。
Justin Pryzby 提交了另一個修訂版的 patch,以允許在分割表上同時執行 CREATE INDEX,新增 SKIPVALID 標誌以進行更多整合,並使 eindexPartitions() 設定 indisvalid。
Andrey V. Lepikhov 提交了另一個修訂版的 patch,以移除不需要的自我聯結。
Ranier Vilela 提交了一個 patch,以修復 src/backend/storage/ipc/latch.c 中 NULL 檢查之前的解引用。
Ranier Vilela 提交了一個 patch,以修復 src/backend/utils/adt/ruleutils.c 中的顯式 NULL 解引用。
Justin Pryzby 送出了一個新版本的 patch,允許 CLUSTER、VACUUM FULL 和 REINDEX 能夠即時變更資料表空間。
Tom Lane 送出了一個 patch,新增了一種新的 CoercionForm 變體:COERCE_SQL_SYNTAX。
Greg Sabino Mullane 送出了一個新版本的 patch,以協助 psql 的 \df 指令根據函數的引數來選擇函數。
Tom Lane 送出了一個 patch,使 Gen_fmgrtab.pl 能夠為所有 pg_proc 條目產生巨集。
Tom Lane 送出了一個 patch,用來移除 aggregate_dummy()。