PostgreSQL 14 Release Candidate 1 已發布。 測試!
JDBC 42.2.24 已發布 https://jdbc.postgresql.org/documentation/changelog.html#version_42.2.24
check_pgbackrest 2.1,一個相容於 Nagios 的 pgBackRest 監控程式已發布。https://github.com/dalibo/check_pgbackrest/releases
sqlite_fdw 2.1.0 已發布。
https://archives.postgresql.org/pgsql-jobs/2021-09/
Planet PostgreSQL: https://planet.postgresql.org/
PostgreSQL 每週新聞由 David Fetter 本週為您帶來
請在太平洋標準時間/太平洋日光節約時間星期日下午 3:00 前將新聞和公告提交至 david@fetter.org。
Tomáš Vondra 推出了
不允許在系統欄位上使用擴展統計資訊。自引入擴展統計資訊以來,我們已不允許引用系統欄位。因此,例如 CREATE STATISTICS s ON ctid FROM t; 將會失敗。但是透過表示式上的擴展統計資訊,可以很容易地繞過此限制 CREATE STATISTICS s ON (ctid::text) FROM t; 這是 a4d75c86bf 中的一個疏忽,透過新增一個簡單的檢查來修正。向後移植到 PostgreSQL 14,該版本引入了對表示式上的擴展統計資訊的支援。向後移植:14 討論:https://postgr.es/m/20210816013255.GS10479%40telsasoft.com https://git.postgresql.org/pg/commitdiff/c9eeef2a15c02ff7dd2bf3251dbee925b050fc0f
在建置每個統計物件後釋放記憶體。到目前為止,給定關係上的所有擴展統計資訊都是在相同的記憶體上下文中建置的,而沒有重置。某些記憶體已明確釋放,但並非全部 - 例如,在反解凍值時分配的記憶體很難釋放。自 PostgreSQL 10 中引入擴展統計資訊以來,一直都是這樣運作的,但是新增對表示式上的擴展統計資訊的支援使問題變得更糟,因為它增加了要建置的統計資訊的數量。透過新增一個記憶體上下文來修正,該上下文在建置每個統計物件(包括其中的所有統計資訊種類)後會重置。在建置每個統計資訊種類後重置它會更好,但是它需要更多侵入性變更和結果複製,使其更難以向後移植。向後移植到 PostgreSQL 10,該版本引入了擴展統計資訊。作者:Justin Pryzby 報告人:Justin Pryzby 審閱人:Tomas Vondra 向後移植:10 討論:https://postgres.tw/message-id/20210915200928.GP831%40telsasoft.com https://git.postgresql.org/pg/commitdiff/83772cc78e0392a247231ba510c61b6612b93b3f
釋放 dependency_degree 分配的記憶體。計算函數依賴的程度可能會分配大量記憶體 - 我們已經釋放了大部分明確分配的記憶體,但是例如,反解凍的 varlena 值被遺留下來。這可能是一個問題,因為我們考慮了很多依賴性(所有組合),並且每次都可能再次進行反解凍。透過在專用上下文中呼叫 dependency_degree() 並在每次呼叫後重置它來修正。我們只需要計算出的依賴程度,因此我們不需要複製任何內容。向後移植到 PostgreSQL 10,該版本引入了擴展統計資訊。向後移植:10 討論:https://postgres.tw/message-id/20210915200928.GP831%40telsasoft.com https://git.postgresql.org/pg/commitdiff/ad8a166ca86846ab691bd6dafc695e0f7dd96012
Tom Lane 推出了
Doc:對「格式化」部分進行小的改進。新增更具體的連結到原始碼樹中。 https://git.postgresql.org/pg/commitdiff/5577cd571ad3528471152f68636ac03c80576977
修正在 plpgsql 內的 CALL 中 STABLE 參數的錯誤評估。在提交 84f5c2908 之前,plpgsql CALL 陳述式引數清單中的 STABLE 函數會看到最新的快照,因為 exec_stmt_call 會推送一個新的快照。我擺脫了這一點,因為 COMMIT 內快照消失的可能性使管理跨 CALL 陳述式的快照變得太困難。就程序本身而言,這很好,但是我忘記考慮 CALL 引數清單中 STABLE 函數的可能性。按照目前的情況,這些函數將使用入口的快照作為 ActiveSnapshot 執行,使它們無法看到比入口啟動更新的更新。(VOLATILE 函數沒有問題,因為它們會建立自己的快照;這實際上也是程序本身沒有問題的原因。沒有 STABLE 程序。)我們可以透過在 ExecuteCallStmt 本身內暫時推送一個新的快照來修正此問題。在我們進入正確的程序之前彈出快照可以消除管理問題。可能無用的額外快照抓取有點煩人,但並不比 84f5c2908 之前發生的情況更糟。根據 Alexander Nawratil 的錯誤 #17199。向後移植到 v11,就像先前的修補程式一樣。討論:https://postgr.es/m/17199-1ab2561f0d94af92@postgresql.org https://git.postgresql.org/pg/commitdiff/4476bcb8773b306b9ca84bf2fadcf30acfa2c687
Doc:擴充關於 postgres_fdw 中定序不符危險的警告。更明確地說明遠端定序與本機定序不符的風險。實際上修正這些風險似乎很困難,並且我已經放棄了它可能是向後移植的想法。因此,對於向後分支,我們能做的最好的事情就是新增文件。根據 Jiří Fejfar 的錯誤 #16583 的討論。討論:https://postgr.es/m/2438715.1632510693@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/7b0be9fb2dddb214db2bed0e137b9b42c1479455
避免在 interval_cmp_value() 中進行不必要的除法。當我們只是要重新組合這些值時,將 time 欄位分割為天數和微秒是相當無用的。目前尚不清楚是否有人會在實際案例中注意到速度提升,但是節省一個週期就等於賺到一個週期。討論:https://postgr.es/m/2629129.1632675713@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/e94c1a55dada49772622d2be2d17a2a9973b2661
Álvaro Herrera 推出了
Doc:新增「輔助處理程序」的詞彙條目。也為現有未記載的處理程序新增條目,並調整現有定義以保持一致性。根據 Bharath Rupireddy 的問題。作者:Justin Pryzby pryzby@telsasoft.com 作者:Alvaro Herrera alvherre@alvh.no-ip.org 討論:https://postgr.es/m/CALj2ACVpYCT0M+k8zqrAa4ZQZV+ce5s6G=yajwoS1m=h-jj8NQ@mail.gmail.com https://git.postgresql.org/pg/commitdiff/d3014fff4cd4dcaf4b2764d96ad038f3be7413b0
更清楚地說明 Document XLOG_INCLUDE_XID。我注意到 commit 0bead9af484c 將此標記在 XLogSetRecordFlags 中未加上說明文件,這讓我發現該標記實際上並未執行其唯一註解所說的功能。新增更多註解來改善此情況。回溯到 14,上述 commit 出現的地方。作者:Álvaro Herrera alvherre@alvh.no-ip.org 討論:https://postgr.es/m/202109212119.c3nhfp64t2ql@alvherre.pgsql https://git.postgresql.org/pg/commitdiff/ade24dab97a20dae74fb57c0106dfe0e0303541b
Andres Freund 推送了
pgstat:將關聯統計處理從 AtEO[Sub]Xact_PgStat() 等函數中分離出來。即將到來的 patch 將會增加這些函數的額外工作。為了避免函數變得太複雜/一次做太多事情,將子任務拆分為它們自己的函數。作者:Andres Freund andres@anarazel.de 討論:https://postgr.es/m/20210405092914.mmxqe7j56lsjfsej@alap3.anarazel.de https://git.postgresql.org/pg/commitdiff/e1f958d759ff71a264973d13e9bc86c7db822928
pgstat:準備使用截斷關聯的機制也用於已刪除的關聯。即將到來的共享記憶體統計 patch 以事務方式刪除已刪除物件的統計資料,而不是稍後在 vacuum 中刪除它們。這意味著在事務中 DROP 的統計資料需要像 TRUNCATE 一樣處理已中止的(子)事務:直到 DROP 的統計資料都應還原。重新命名現有的基礎結構以進行準備。作者:Andres Freund andres@anarazel.de 討論:https://postgr.es/m/20210405092914.mmxqe7j56lsjfsej@alap3.anarazel.de https://git.postgresql.org/pg/commitdiff/6b9501660c9384476ca9a04918f5cf94379e419e
Peter Geoghegan 推送了
移除過於熱心的索引刪除斷言。即使偏移量數字指向頁面行指標陣列的末尾之後,損壞的 HOT 鏈也不是意外情況。heap_prune_chain() 並未(而且從未)將這種情況視為意外,因此 heap_index_delete_tuples() 中的衍生程式碼也不應如此。commit 4228817449 中的疏忽。斷言可能只會在 Postgres 14 和 master 上失敗。較早的版本沒有 commit 3c3b8a4b,它教導 VACUUM 截斷堆積頁面的行指標陣列。同樣回溯所有版本,以保持一致。作者:Peter Geoghegan pg@bowt.ie 回報者:Alexander Lakhin exclusion@gmail.com 討論:https://postgr.es/m/17197-9438f31f46705182@postgresql.org 回溯:12-,就像 commit 4228817449 一樣。 https://git.postgresql.org/pg/commitdiff/5e6716cde5749aea506dd3f30b099b6e9b4c5af8
修正「單一值策略」索引刪除問題。當由自底向上的索引刪除傳遞觸發時,不適合將單一值策略應用於重複資料刪除。這浪費了週期,因為後續的自底向上刪除傳遞會過度解釋重複資料刪除實際上「按設計」跳過的較舊的重複 tuple。它也使得自底向上刪除對於恰好跨越無意義的「每個葉節點頁面索引具有單一鍵值」閾值的低基數索引的效果大大降低。為了修正,稍微縮小考慮重複資料刪除的單一值策略的條件。我們已經避免了針對唯一索引的策略,因為我們的高層次目標必須只是為 VACUUM 運行爭取時間(而不是節省空間)。現在,當我們剛剛進行了一個報告失敗的自底向上傳遞時,我們也將避免它。這兩種情況共享相同的高層次目標,並且已經顯著重疊,因此這種方法非常自然。commit d168b666 中的疏忽,它新增了自底向上索引刪除。作者:Peter Geoghegan pg@bowt.ie 討論:https://postgr.es/m/CAH2-WznaOvM+Gyj-JQ0X=JxoMDxctDTYjiEuETdAGbF5EUc3MA@mail.gmail.com 回溯:14-,自底向上刪除是在此版本中引入的。 https://git.postgresql.org/pg/commitdiff/dd94c2852e6e3a246b9fd64bf2d9c7fc01020905
說明 heapam 行指標截斷的問題。在 commit 3c3b8a4b 之前,檢查偏移量數字是否超過堆積頁面的行指標陣列的末尾只是 HOT 鏈遍歷程式碼的防禦性健全性檢查。但是,現在嚴格來說是必要的。將引用該問題的註解新增到 heapam 中需要正確處理它的程式碼中。根據 Alexander Lakhin 的建議。討論:https://postgr.es/m/f76a292c-9170-1aef-91a0-59d9443b99a3@gmail.com https://git.postgresql.org/pg/commitdiff/c7aeb775df895db240dcd6f47242f7e08899adfb
nbtree README:新增有關 latestRemovedXid 的註解。指出索引 tuple 刪除通常需要刪除操作 WAL 記錄的 latestRemovedXid 值。現在,既然它在原始執行期間提前發生,這肯定是整個刪除操作中最昂貴的部分。這可以說是 commit 558a9165e08 中的一個疏忽,它將生成這些值所需的工作從索引刪除 REDO 常式移到了索引刪除操作的原始執行中。 https://git.postgresql.org/pg/commitdiff/48064a8d330db259076fb7b2300544fbf65f4109
vacuumlazy.c:移除過時的 'onecall' 註解。移除對 lazy_vacuum() 的 onecall 引數的過時引用。該函數引數已由 commit 3499df0dee 移除。同時移除引入環繞式容錯保護概念的相鄰註解區塊。在這裡談論容錯保護不再有意義,因為 lazy_vacuum()(和相關函數)不再是觸發容錯保護的唯一位置。自 commit c242baa4a8 教導 VACUUM 在其初始堆積掃描期間考慮觸發容錯保護機制以來,情況一直是如此。 https://git.postgresql.org/pg/commitdiff/c1a47dfe2e9f814e61377f47aa79a113a4c73a63
更新過時的 nbtree 刪除註解。_bt_delitems_delete
() 不再是由索引 tuple 驅動的索引 tuple 刪除使用的高階進入點,這些索引 tuple 的 LP_DEAD 位元已設定(現在稱為「簡單索引 tuple 刪除」)。在 commit d168b66682 之後,它變成了一個較低層級的常式,僅由 _bt_delitems_delete_check
() 呼叫。 https://git.postgresql.org/pg/commitdiff/ce2a86053380f7e82dc8318ac48a22a7ab266398
Michaël Paquier 推送了
引入 GUC shared_memory_size_in_huge_pages。這個執行時間計算的 GUC 顯示伺服器主共享記憶體區域所需的大頁數量,充分利用了 0c39c29 和 0bd305e 中所做的工作。這對於使用者來說很有用,可以估計伺服器所需的大頁數量,因為現在可以在不必啟動伺服器並可能分配大量共享記憶體的情況下進行估計。大頁的數量是根據現有的 GUC huge_page_size(如果已設定)計算的,或者透過查看 Linux 上的 /proc/meminfo 使用系統的預設值來計算的。這裡沒有什麼新鮮的東西,因為這個 commit 重用了現有的計算方法,只是直接向使用者公開了這些資訊。重新架構了計算大頁大小的常式,以限制具有平台特定標記的檔案數量。這個新 GUC 的名稱是基於所進行的討論中最受歡迎的選擇。這僅在 Linux 上受支援。我花時間在 Linux、Windows 和 MacOS 上測試了這個變更,雖然最後兩個不支援大頁。第一個根據現有的 GUC huge_page_size 或系統的預設值正確計算頁面數量。感謝 Andres Freund、Robert Haas、Kyotaro Horiguchi、Tom Lane、Justin Pryzby(以及這裡忘記的任何人)進行討論。作者:Nathan Bossart 討論:https://postgr.es/m/F2772387-CE0F-46BF-B5F1-CC55516EB885@amazon.com https://git.postgresql.org/pg/commitdiff/43c1c4f65eab77bcfc4f535a7e9ac0421e0cf2a5
修正 TestLib.pm 中需要調整以適應 Msys perl 輸出的地方。與原生 perl 的輸出相反,Msys perl 產生的輸出帶有 CRLFs 字元。TAP 程式碼中已經有一些地方會在 Msys 上自動將 CRLFs (\r\n) 轉換為 LF (\n),但我們在執行指令並使用其輸出進行比較時,遺漏了一些地方,這將導致失敗。這個問題是透過 5adb067 中新增的、使用 TestLib::command_checks_all() 的測試發現的,但在仔細檢查後,發現更多程式碼路徑缺少篩選器。此變更已向下移植到所有版本,以防止在穩定分支中引入新測試時出現任何意外。Reviewed-by: Andrew Dunstan, Álvaro Herrera Discussion: https://postgr.es/m/1252480.1631829409@sss.pgh.pa.us Backpatch-through: 9.6 https://git.postgresql.org/pg/commitdiff/0d91c52a8fc71bfe5664a13368e42e1dabc5fe78
修正 postgres -C 的 TAP 測試的一些問題。這解決了 0c39c292 中為執行時期 GUCs 新增的測試的兩個問題:- 重新啟用 Msys 上的測試。該測試可能會因為 Msys perl 產生的 \r\n 而失敗。0d91c52a 已經處理了這個問題。- 允許測試在具有權限的帳戶的環境中執行。在具有權限的帳戶下運行的 CI 會因為權限失敗而失敗,正如 Andres Freund 所報告的那樣。這個問題已透過將 postgres 指令包裝在 pg_ctl 中來修正,因為後者會處理任何需要的權限。檢查 postgres -C 在執行個體運行時的執行時期參數失敗的測試已被刪除,因為 pg_ctl 會產生不穩定的錯誤代碼(不需要 CI 來重現)。Discussion: https://postgr.es/m/20210921032040.lyl4lcax37aedx2x@alap3.anarazel.de https://git.postgresql.org/pg/commitdiff/1a9d802828110c87a207785aaf6b00d8917a86ad
doc: 在 CREATE EVENT TRIGGER 頁面中新增遺失的標記。Reported-by: rir Discussion: https://postgr.es/m/20210924183658.3syyitp3yuxjv2fp@localhost Backpatch-through: 9.6 https://git.postgresql.org/pg/commitdiff/1ab70b11e6425c955c24aa301188de32356bebb8
doc: 改善使用 GUCs 的索引 vacuuming 的說明。根據維護工作記憶體(maintenance_work_mem),索引清理可能會發生多次,以手動 VACUUM 為例。對於 autovacuum,如果設定了 autovacuum_work_mem,則由其控制。該文檔提到了前者,但沒有在 autovacuum 的環境中提及後者。Reported-by: Nikolai Berkoff Author: Laurenz Albe, Euler Taveira Discussion: https://postgr.es/m/161545365522.10134.12195402324485546870@wrigleys.postgresql.org Backpatch-through: 9.6 https://git.postgresql.org/pg/commitdiff/1ba841072ebeb1a6605395950a51c869de42a104
修正文檔中的錯字。Author: Justin Pryzby Discussion: https://postgr.es/m/20210924215827.GS831@telsasoft.com Backpatch-through: 9.6 https://git.postgresql.org/pg/commitdiff/7c1d8a243f8bd46604c9b292f392aab170eed821
Amit Kapila pushed
在 reorderbuffer.c 的錯誤中新增父表格名稱。這有助於對解碼期間可能發生的特定錯誤的原因進行疑難排解。Author: Jeremy Schneider Reviewed-by: Amit Kapila Discussion: https://postgr.es/m/808ed65b-994c-915a-361c-577f088b837f@amazon.com https://git.postgresql.org/pg/commitdiff/5e77625b260a781316bb94ea9750dc66c50152bf
使 publication 中的 partitioned table 的所有 partitions 無效。在將父表格新增到 publication 之後,即使沒有 replica identity,也允許對 partition 進行 Updates/Deletes。這稍後會導致 subscribers 出現錯誤。原因是我們沒有使 partition 的 relcache 無效,並且 partition 的 publication 資訊沒有被重建。同樣地,在將 partitioned table 從 publication 中移除後,我們也沒有使 partition 的 relcache 無效,這將禁止在沒有任何 publication 的情況下,對其 partition 進行 Updates/Deletes(即使沒有 replica identity)。Reported-by: Haiying Tang Author: Hou Zhijie and Vignesh C Reviewed-by: Vignesh C and Amit Kapila Backpatch-through: 13 Discussion: https://postgr.es/m/OS0PR01MB6113D77F583C922F1CEAA1C3FBD29@OS0PR01MB6113.jpnprd01.prod.outlook.com https://git.postgresql.org/pg/commitdiff/4548c76738b368a11a5dad052f9653a349eeb52c
Peter Eisentraut pushed
使用 PG_INT64_MAX/PG_INT64_MIN。此程式碼是在引入這些符號之前編寫的,但現在我們可以簡化它。https://git.postgresql.org/pg/commitdiff/f9ea2960310c235a7ae97847c0757eba9f6f9a85
新增遺失的 $Test::Builder::Level 設定。其中一個設定被 c50624c 意外刪除。其他設定是類比新增的。Discussion: https://postgres.tw/message-id/ae1143fb-455c-c80f-ed66-78d45bd93303@enterprisedb.com https://git.postgresql.org/pg/commitdiff/73aa5e0cafd0d577fe464ed1d9ac317103f27ea4
Fujii Masao pushed
Alexander Korotkov pushed
John Naylor pushed
將 unicode_east_asian_fw_table.h 的例外情況新增到 cpluspluscheck。unicode_east_asian_fw_table.h 不應單獨編譯,類似於 unicode_combining_table.h,但 cpluspluscheck 沒有收到通知。bab982161 中的疏忽。根據 Tom Lane 的報告 https://git.postgresql.org/pg/commitdiff/a315b19cceeb2ccbe17c7ddd6e7c90911b325f9b
也將 unicode_east_asian_fw_table.h 的例外情況新增到 headerscheck。繼 a315b19cc 之後 https://git.postgresql.org/pg/commitdiff/88b0ae15bc099df6192a3b69b853f86fb015339a