FOSDEM PGDay 2022 將於 2022 年 2 月 5-6 日在線上舉行。 https://fosdem.org/2022/
PostgreSQL 轉換指南,包含許多來之不易的智慧,並提供法文和英文版本,已發布
pgDay Paris 2022 將於 2022 年 3 月 24 日在法國巴黎舉行。 徵稿 (CfP) 開放至巴黎時間 2021 年 12 月 31 日午夜。
Citus Con,一個全球虛擬開發者活動,將於 2022 年 4 月 12-13 日舉行。 CFP 現已開放。
Pgpool-II 4.3.0,一個用於 PostgreSQL 的連線池和語句複製系統,已發布。
Access-to-PostgreSQL v2.3 已發布。
check_pgbackrest 2.2,一個與 Nagios 相容的 pgBackRest 監控程式,已發布。 https://github.com/dalibo/check_pgbackrest/releases
DB Comparer 5.0 for PostgreSQL 已發布。
Database .NET v33.6,一個多資料庫管理工具,現在支援 PostgreSQL,已發布。
pgAdmin4 6.3,一個用於 PostgreSQL 的 Web 和原生 GUI 控制中心,已發布。
pgFormatter 5.2,一個用於 SQL 代碼的格式化/美化工具,已發布。 https://github.com/darold/pgFormatter/blob/master/ChangeLog
MySQL-to-PostgreSQL v5.5 已發布。
https://archives.postgresql.org/pgsql-jobs/2021-12/
Nordic PGDay 2022 將於 2022 年 3 月 22 日在芬蘭赫爾辛基的希爾頓赫爾辛基海灘酒店舉行。 CfP 開放至 2021 年 12 月 31 日 此處
Planet PostgreSQL: https://planet.postgresql.org/
PostgreSQL 每週新聞由 David Fetter 於本週為您帶來
請在太平洋標準時間 (PST8PDT) 星期日下午 3:00 前將新聞和公告提交至 david@fetter.org。
Michaël Paquier 推送了
改進 psql 的 tab 鍵自動完成,適用於檢視表、FDW、序列和轉換。 進行了以下改進: - 為 ALTER SEQUENCE AS 新增類型完成。 - 忽略轉換的 ALTER,因為該命令不受支援。 - 為 ALTER FOREIGN DATA WRAPPER 新增更多完成。 - 在 ALTER VIEW 中新增與列相關的選項。 這是 0cd6d3b 中所做工作的延續。 作者:Ken Kato 討論: https://postgr.es/m/9497ae9ca1b31eb9b1e97aded1c2ab07@oss.nttdata.com https://git.postgresql.org/pg/commitdiff/f44ceb46ec2d8da48f6e145bf462d5620c25e079
集中控制檔案更新時的時間戳計算。 此提交將控制檔案的時間戳計算移動到 src/common/ 的例程中,負責更新後端的控制檔案,該例程由多個前端工具(pg_rewind、pg_checksums 和 pg_resetwal)和後端本身共用。 此變更的直接影響是在 pg_rewind 和 pg_checksums 中寫入控制檔案時更新控制檔案的時間戳,這有助於追蹤這些操作的控制檔案更新,後端也會在其日誌中的啟動時追蹤。 這一部分可以說是錯誤,因為 ControlFileData->time 每次寫入新版本的控制檔案時都應該更新,但這是一個行為變更,因此不進行回溯修補。 作者:Amul Sul 審閱者:Nathan Bossart、Michael Paquier、Bharath Rupireddy 討論: https://postgr.es/m/CAAJ_b97nd_ghRpyFV9Djf9RLXkoTbOUqnocq11WGq9TisX09Fw@mail.gmail.com https://git.postgresql.org/pg/commitdiff/6fb7c5d67cdd55454fe6317f939a191f85e96473
修正 win32stat.c 中標準流上的 fstat() 的相容性錯誤。 GetFinalPathNameByHandleA() 無法在 _WIN32_WINNT < 0x0600 的編譯環境中使用,這表示 Postgres 仍然需要支援 MinGW 下的一些 buildfarm 成員使用的至少 Windows XP。 buildfarm 回報這是一個編譯警告,但這實際上比報告更糟,因為代碼將無法工作。 相反,這切換到 GetFileInformationByHandle(),它能夠在標準流上失敗,並在重新導向的流上成功,這正是我們在代碼中模擬 fstat() 時所尋找的。 我們也知道,由於 win32stat.c 的現有邏輯,它能夠在所有仍然支援的環境中工作。 由 10260c7 引入的問題,因此回溯修補到 14。 報告者:Justin Pryzby,透過 buildfarm 成員 jacana 作者:Michael Paquier 審閱者:Juan José Santamaría Flecha 討論: https://postgr.es/m/20211129050122.GK17618@telsasoft.com 回溯修補透過:14 https://git.postgresql.org/pg/commitdiff/58651d8dd6a56af306a361e2c386db798164c0f1
修正錯字。 作者:Lingjie Qiang 討論: https://postgr.es/m/OSAPR01MB71654E773F62AC88DC1FC8CC80669@OSAPR01MB7165.jpnprd01.prod.outlook.com https://git.postgresql.org/pg/commitdiff/98105e53e0ab472b7721a3e8d7b9f1750a635120
修正某些 GUC 的標誌並改進一些描述。 此提交修正了 GUC 的一些問題: - enable_incremental_sort 沒有標記為 GUC_EXPLAIN,導致在使用與預設值不同的值時,它不會列在 EXPLAIN (SETTINGS) 的輸出中,這與其他規劃器級別的 GUC 相反。 - trace_recovery_messages 遺漏了 GUC_NOT_IN_SAMPLE,就像其他開發者選項一樣。 - ssl_renegotiation_limit 應標記為 COMPAT_OPTIONS_PREVIOUS。 在此同時,這修正了一個與 autovacuum_freeze_max_age 相關的不正確註解,並改進了最近引入的其他 GUC 的描述。 從同一作者的較大修補程式集中提取。 作者:Justin Pryzby 描述: https://postgr.es/m/20211129030833.GJ17618@telsasoft.com https://git.postgresql.org/pg/commitdiff/be5455124b0f073ba3924ae2ba302a27b1686230
改進 psql 的 tab 鍵自動完成,適用於各種 DROP 命令。 進行了以下改進: - 處理 DROP OWNED、matviews 和策略的 RESTRICT/CASCADE。 - 處理 DROP TRANSFORM 這是 0cd6d3b 和 f44ceb4 中所做工作的延續。 作者:Ken Kato 審閱者:Asif Rehman 討論: https://postgr.es/m/0fafb73f3a0c6bcec817a25ca9d5a853@oss.nttdata.com https://git.postgresql.org/pg/commitdiff/9270778f467dad0d78d3b9e435a89a6039322b2f
修正 slotfuncs.c 中的註解語法。作者:Bharath Rupireddy 討論:https://postgr.es/m/CALj2ACUkrNR2xTak+QaqxoTjPKGn8zXWripv7SR27t+Q5qF1Wg@mail.gmail.com https://git.postgresql.org/pg/commitdiff/7799d4e3bdd14c90989d829a9b24e73d4ff4d4ad
將 pg_upgrade 測試中使用的所有 SQL 查詢移至獨立檔案。現有的 pg_upgrade/test.sh 和 buildfarm 代碼在執行跨版本升級測試時,一直持有相同的 SQL 查詢集,以便調整升級前由迴歸測試建立的物件(主要是,需要從來源捨棄不相容或不存在的物件,或者重新建立)。此變更將所有這些 SQL 查詢移動到一個新的、獨立的檔案中,並使用一組 \if 子句來處理根據要升級的舊叢集版本的版本檢查。長期計畫是讓 buildfarm 代碼重新使用這個新的 SQL 檔案,以便提交者能夠修正 pg_upgrade 測試中的任何相容性問題,而無需修改 buildfarm 客戶端。請注意,這僅適用於主要的迴歸測試套件,並且尚未對 contrib 模組執行任何操作(這些模組有更多問題,例如它們的資料庫名稱)。回溯修補至 10 版,調整版本檢查,因為此腳本只需要向後相容,以便盡可能清理 buildfarm 客戶端中的最大量代碼。作者:Justin Pryzby, Michael Paquier 討論:https://postgr.es/m/20201206180248.GI24052@telsasoft.com 回溯修補:10 https://git.postgresql.org/pg/commitdiff/0df9641d39057f431655b92b8a490b89c508a0b3
pg_waldump:當被 SIGINT 中斷時,發出統計摘要。 以前,如果 pg_waldump 被 SIGINT 中斷(或說簡單的 Ctrl+C),它不會顯示其統計摘要。 此提交新增了一個 SIGINT 的信號處理程序,捕獲該信號以便在最早的方便時退出,從而在退出前允許顯示統計摘要。 這使得報告更具互動性,類似於 strace -c。 這個新行為使得選項 --stats 和 --follow 的組合更有用,以便使用者在這種情況下獲得任何 pg_waldump 呼叫的報告。 關於計算的統計資料的 LSN 範圍的資訊作為標頭新增到顯示的報告中。 此實作來自 Álvaro Herrera 和我自己的建議,此前此修補程式的作者抱怨 --stats 和 --follow 最初一起使用沒有用。 如文檔所述,Windows 不支援此功能,但可以透過捕獲與 Ctrl+C 相關聯的終端事件來實現其支援,例如(這可能需要更集中的實作,因為其他工具可以從通用 API 中受益)。 作者:Bharath Rupireddy 討論:https://postgr.es/m/CALj2ACUUx3PcK2z9h0_m7vehreZAUbcmOky9WSEpe8TofhV=PQ@mail.gmail.com https://git.postgresql.org/pg/commitdiff/f2c52eeba919a1b191f60445001371bd7c53aaa9
改進各種 GUC 的描述。 此提交修復了一些 GUC 描述中的一些不一致之處,同時使其措辭在它們所依賴的單位方面更通用。 對於它們中的大多數,這消除了使用諸如「N 秒」或「N 位元組」之類的術語,這些術語可能不容易應用於翻譯的這些字串的所有語言(根據我自己的經驗,這在法語和英語中有效,在日語中較少)。 根據下面列出的作者之間的辯論。 作者:Justin Pryzby, Michael Paquier 討論:https://postgr.es/m/20211129030833.GJ17618@telsasoft.com https://git.postgresql.org/pg/commitdiff/03774f9bb304d49fae3379806115aaa5d1fafea2
修復使用 REINDEX CONCURRENTLY 時 toast 索引的損壞。 在 toast 索引或 toast 關係上執行的 REINDEX CONCURRENTLY 可能會損壞重建的目標索引,因為並行運行的後端在完成其本地操作時會直接釋放 toast 關係上的鎖,而不是在處理 toast 值的交易提交後釋放鎖。 這裡的修復很簡單:我們現在在保存或刪除 toast 值時,在處理它們的交易提交之前,在 toast 關係上持有 ROW EXCLUSIVE 鎖,以便並行發生的併發索引重建能夠等待任何活動並查看任何新插入(或刪除)的行。 新增了一個隔離測試來檢查這裡修復的情況之後,由於它依賴 allow_system_table_mods 將 toast 表及其索引重新命名為固定名稱,因此設計上有些花哨。 這樣,就可以直接重新索引它們,而無需依賴底層關係的 OID。 請注意,這也不能使用 DO 塊,因為 REINDEX CONCURRENTLY 無法在交易塊中運行。 該測試已回溯修補至 13,在那裡可以透過 c4a7a39 在測試套件中使用 allow_system_table_mods。 報告人:Alexey Ermakov 分析人:Andres Freund, Noah Misch 作者:Michael Paquier 審閱人:Nathan Bossart 討論:https://postgr.es/m/17268-d2fb426e0895abd4@postgresql.org 回溯修補:12 https://git.postgresql.org/pg/commitdiff/f99870dd867331f576a84e37438da86a866559c4
改進 CREATE/ALTER SUBSCRIPTION 選項的解析。 這簡化了程式碼,因此 parse_subscription_options() 的呼叫者不再需要將 SubOpts 清零,而是保留提供的選項的位元圖以及預設/已解析的選項值。 這也簡化了與命令支援的選項相關的一些檢查,在檢查不相容性時。 同時,重新排序了為「slot_name = NONE」的不支援組合產生的錯誤。 與以前的主要版本相比,這可能會產生不同的錯誤,但使用者必須瀏覽所有這些錯誤才能在這種情況下獲得正確的命令,當使用選項「enabled」和「create\slot」的錯誤值時,因此最終產生的命令將保持不變。 作者:Peter Smith 審閱人:Nathan Bossart 討論:https://postgr.es/m/CAHut+PtXHfLgLHDDJ8ZN5f5Be_37mJoxpEsRg8LNmm4XCr06Rw@mail.gmail.com https://git.postgresql.org/pg/commitdiff/00029deaf65aad47044d9290fe80f2f68601f7ac
修復一些 {a,an} 的拼字錯誤。 其中一項變更會影響文檔,因此進行回溯修補。 作者:Peter Smith 討論:https://postgr.es/m/CAHut+Pu6+c+r3mY24VT7u+H+E_s6vMr5OdRiZ8NT3EOa-E5Lmw@mail.gmail.com 回溯修補:14 https://git.postgresql.org/pg/commitdiff/5d08137076fd39694188ec4625013756aab889e1
改進某些具有交易命令的 WAL 記錄的描述。 此提交改進了 Transaction RMGR 的某些 WAL 記錄的描述: - 追蹤交易提交的 remote_apply。 此 GUC 是使用者可設定的,因此此資訊可用於除錯。 - 為 PREPARE TRANSACTION 新增複寫來源資訊,包括來源 ID、LSN 和時間戳記 - 與上面相同,適用於 ROLLBACK PREPARED。 這會影響 pg_waldump 或任何使用這些描述例程的內容的格式,因此不會進行回溯修補。 作者:Masahiko Sawada, Michael Paquier 討論:https://postgr.es/m/CAD21AoD2dJfgsdxk4_KciAZMZQoUiCvmV9sDpp8ZuKLtKCNXaA@mail.gmail.com https://git.postgresql.org/pg/commitdiff/c8b733c4c4b0c5b7aa93553aa5b7f2c1d0bf00bf
移除 PREPARE TRANSACTION 中關於複製來源的斷言。當使用複製來源時,可以選擇性地使用 pg_replication_origin_xact_setup() 來設定 LSN 和時間戳記以標記來源,這些資訊會額外添加到 WAL 中,用於事務提交或中止(包括 2PC 事務)。PREPARE TRANSACTION 的程式碼路徑中的一個斷言假設此資料應始終被設定,因此在使用複製來源但未設定來源 LSN 時會觸發。添加了一些測試來涵蓋更多此類情境。這是 commit 1eb6d65 中的疏忽。根據與 Amit Kapila 和 Masahiko Sawada 的討論。討論:https://postgr.es/m/YbbBfNSvMm5nIINV@paquier.xyz Backpatch-through: 11 https://git.postgresql.org/pg/commitdiff/ece8c76192fee0b78509688325631ceabca44ff5
調整 MSVC 的 TAP 測試中某些環境設定的行為。edc2332 在 vcregress.pl 中引入了一些對環境變數 LZ4、TAR 和 GZIP_PROGRAM 的控制,以允許任何 TAP 測試都能使用這些指令。這使得設定與 src/Makefile.global.in 更加一致,因為 Make 和 MSVC 建置使用相同的預設值。每個參數都可以在 buildenv.pl 中更改,但由於在載入 buldenv.pl 後會分配一個預設值,因此無法取消任何這些參數,並且使用空值也無法使用 "||="。由於某些環境的 PATH 中可能沒有相容的指令(例如來自 MinGW 的 tar 就是一個問題),這可能會導致測試失敗,且沒有退出路徑來繞過任何失敗的測試。此 commit 更改了此問題,以便在載入 buildenv.pl 之前,而不是之後,分配 LZ4、TAR 和 GZIP_PROGRAM 的預設值。這樣,我們就能保持與具有相同預設值的 GNU 建置相同數量的相容性,並且可以取消任何這些值。同時,這會在專門用於 MSVC 的 TAP 測試的部分中添加一些關於這三個變數的說明文件。根據與 Andrew Dunstan 的討論。討論:https://postgr.es/m/YbGYe483803il3X7@paquier.xyz Backpatch-through: 10 https://git.postgresql.org/pg/commitdiff/7acd01015c4a5edb253ea9468ccb71ef99cabd1a
為 pg_upgrade 添加 -N/--no-sync 選項。這是一個與 src/bin/ 的其他工具(pg_checksums、pg_dump、pg_rewind 和 pg_basebackup)提供一致的選項,可用於在測試時減少 I/O 負擔。這不應在生產環境中使用。pg_upgrade 的所有迴歸測試都已更新為使用此新選項。這可以在 I/O 受限的環境中最多減少幾秒鐘的時間,方法是避免刷新升級後的新叢集的資料夾。作者:Michael Paquier 審閱者:Peter Eisentraut 討論:https://postgr.es/m/YbrhzuBmBxS/DkfX@paquier.xyz https://git.postgresql.org/pg/commitdiff/3d5ffccb6df323f528cf870c26d0d0517ffe3eaa
修正 pg_receivewal 的 TAP 測試中的一個錯字。在 d62bcc8 中引入,在該區域進行 hack 時發現。https://git.postgresql.org/pg/commitdiff/22592e10b41a95f841642fa16127521989177bbc
Tom Lane 推送
用更好的 PRNG API 和演算法取代 random()、pg_erand48() 等。將 xoroshiro128** 標準化為我們的基本 PRNG 演算法,消除了一堆平台相依性以及從根本上過時的 PRNG 程式碼。此外,此 API 替換將簡化未來再次替換演算法,如果需要的話。xoroshiro128** 比 drand48 系列慢幾個百分點,但它可以產生完整的 64 位元隨機值,而不僅僅是 48 位元,而且它應該更值得信賴。根據您考慮的平台,它可能明顯快於平台的 random();而且我們可以輕鬆地擁有非全域狀態向量,這與 random() 不同。它在密碼學上並不強大,但它取代的函數也不是。Fabien Coelho,由 Dean Rasheed、Aleksander Alekseev 和我自己審閱。討論:https://postgr.es/m/alpine.DEB.2.22.394.2105241211230.165418@pseudo https://git.postgresql.org/pg/commitdiff/3804539e48e794781c6145c7f988f5d507418fa8
pg_global_prng_state 的可移植性 hack。PGDLLIMPORT 僅適用於後端中宣告的變數,而不適用於來自前端程式碼中包含的程式庫的變數。(這不是一個特別好的修復方法,但暫時使用其他地方使用的方法。)討論:https://postgr.es/m/E1mrWUD-000235-Hq@gemulon.postgresql.org https://git.postgresql.org/pg/commitdiff/11b500072e42c214462b973b0b05f1c68992226b
簡化宣告從 libpgcommon 和 libpgport 匯出的變數。這會還原 commit c2d1eea9e 和 11b500072,以及其他地方類似的 hack,而是設置 PGDLLIMPORT 巨集,以便它可以無條件使用。這是可行的,因為在前端程式碼中,對於從這些程式庫匯出的變數,我們不需要在定義或使用檔案中進行標記;而且前端程式碼也不需要訪問從核心後端匯出的變數。同時,編寫一些關於 PGDLLIMPORT 和 PGDLLEXPORT 巨集的實際文件。由我提出的補丁,基於 Robert Haas 的建議。討論:https://postgr.es/m/1160385.1638165449@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/e04a8059a74c125a8af94acdcb7b15b92188470a
Doc: 改善關於物化視圖中 ORDER BY 的文件。刪除物化視圖範例中令人困惑的 ORDER BY 用法。它沒有為範例添加任何內容,但可能會鼓勵人們遵循不良做法。澄清 REFRESH MATERIALIZED VIEW 關於是否保留視圖排序的注意事項(它沒有)。Maciek Sakrejda 討論:https://postgr.es/m/CAOtHd0D-OvrUU0C=4hX28p4BaSE1XL78BAQ0VcDaLLt8tdUzsg@mail.gmail.com https://git.postgresql.org/pg/commitdiff/4f33af23e7e3ac30b3cb9480981c3accf401ef01
在檢查隨機數來源時應對交叉編譯。Commit 16f96c74d 忽略了交叉編譯的可能性,導致交叉編譯在配置階段失敗,除非您選擇了 --with-openssl。由於我們現在或多或少地假設 /dev/urandom 在任何地方都可用,因此假設交叉編譯目標也具有它似乎是合理的,而不是失敗。根據來自 Vincas Dargis 的投訴。反向移植到 v14,這是從哪裡開始的。討論:https://postgr.es/m/0dc14a31-acaf-8cae-0df4-a87339b22bd9@gmail.com https://git.postgresql.org/pg/commitdiff/b637101644aa84dccc7da4f30bad40452939b57a
psql:將查詢內的 "--" 註解包含在傳送至伺服器的內容中。psql 的詞法分析器過去會從收集並傳送至伺服器的內容中刪除 dash-dash (單行) 註解。這與它對 slash-star 註解的處理方式不一致,並且之前有人抱怨他們希望這些註解能被捕獲在伺服器日誌中。然而,完全取消這個決定似乎會導致過大的行為變更。特別是,查詢開始之前的行上的註解通常不被認為是查詢的一部分。我們可以改進這種情況的方式是捕獲那些明顯在查詢內的註解,也就是在第一個非空白、非註解 token 之後,但在查詢結束的分號或反斜線命令之前。這是一個幾乎微不足道的程式碼變更,並且僅影響少數回歸測試結果。(很想嘗試將相同的規則應用於 slash-star 註解。但很難看到如何在不讓跨行的註解產生奇怪的歷史行為的情況下做到這一點,特別是如果使用者然後在與星號斜線相同的行上開始一個新的查詢。鑑於缺乏投訴,我們就先不處理這種情況。)討論:https://postgr.es/m/CAJcOf-cAdMVr7azeYR7nWKsNp7qhORzc84rV6d7m7knG5Hrtsw@mail.gmail.com https://git.postgresql.org/pg/commitdiff/83884682f4df96184549b91869a1cf79dafb4f94
psql:將查詢之間的 "--" 註解視為單獨的歷史紀錄項目。如果我們尚未為新的查詢收集到任何非空白、非註解 token,則在讀取另一行之前,將目前的輸入行刷新到歷史紀錄中。這使 psql 的歷史紀錄行為與以下觀察結果一致:僅包含註解的行通常不被認為是下一個查詢的一部分。psql 的提示行為也與該觀點一致,因為在您輸入非空白或 "--" 註解的內容之前,它不會更改提示。Greg Nancarrow,經我稍微簡化。討論:https://postgr.es/m/CAJcOf-cAdMVr7azeYR7nWKsNp7qhORzc84rV6d7m7knG5Hrtsw@mail.gmail.com https://git.postgresql.org/pg/commitdiff/c2f654930e9f8119b9ed12caab6192d0aafe5ebd
psql:預設情況下,將 comment-begin 設定初始化為有用的值。Readline 的 meta-# 命令應該在目前行的開頭插入註解標記。然而,預設標記是 "#",這對於 SQL 來說完全沒有幫助。將其設定為 "-- " 作為替代。(此設定仍然可以在個人的 ~/.inputrc 檔案中被覆蓋,因此此變更不會影響已經採取措施使該命令有用的人。)討論:https://postgr.es/m/CAJcOf-cAdMVr7azeYR7nWKsNp7qhORzc84rV6d7m7knG5Hrtsw@mail.gmail.com https://git.postgresql.org/pg/commitdiff/3d858af07ee67efda3778bdd655852afabf4a125
避免在大規模 REASSIGN OWNED BY 操作期間洩漏記憶體。各種 ALTER OWNER 常式傾向於在 CurrentMemoryContext 中洩漏記憶體。當它們每個命令只被調用一次時,這不是問題;但在這種用法中,我們可能接觸到許多物件,它可能導致嚴重的記憶體洩漏。通過在一個短暫的上下文中執行每個調用來修復它。(DROP OWNED BY 可能有類似的問題,除了您可能會在注意到之前耗盡鎖定表空間。REASSIGN 值得修復,因為對於大多數非表格物件類型,它不會獲取任何鎖定。)回溯修補到所有受支援的分支。不幸的是,在回溯分支中,這僅在有限的程度上有所幫助,因為 sinval 訊息佇列在此用法中會大量膨脹,然後在 commit 3aafc030a 之前,消耗的記憶體或多或少與實際洩漏的記憶體相當。儘管如此,這顯然是一個帶有簡單修復的洩漏,所以我們不妨修復它。Justin Pryzby,根據 Guillaume Lelarge 的報告。討論:https://postgr.es/m/CAECtzeW2DAoioEGBRjR=CzHP6TdL=yosGku8qZxfX9hhtrBB0Q@mail.gmail.com https://git.postgresql.org/pg/commitdiff/babe545caeba4c62feb3030940d93432721eea57
為 rl_variable_bind() 新增 configure probe。一些極其古老的 readline 程式庫缺少此函數,導致 commit 3d858af07 失敗。根據 buildfarm (通過 Michael Paquier)。討論:https://postgr.es/m/E1msTLm-0007Cm-Ri@gemulon.postgresql.org https://git.postgresql.org/pg/commitdiff/a7da41981021575e2359683d994eec6c9d246321
在 Windows 上,在後端關閉期間顯式關閉客戶端 socket。事實證明,這是必要的,以防止 Winsock 丟棄任何尚未發送的數據,例如解釋進程終止原因的錯誤訊息。核心進行的隱式關閉與顯式關閉的行為不同,這非常奇怪,但很難與實驗結果爭論。由 Alexander Lakhin 和 Lars Kanis 獨立提交(儘管有我的評論)。回溯修補到所有受支援的分支。討論:https://postgr.es/m/90b34057-4176-7bb0-0dbb-9822a5f6425b@greiz-reinsdorf.de 討論:https://postgr.es/m/16678-253e48d34dc0c376@postgresql.org https://git.postgresql.org/pg/commitdiff/6051857fc953a62db318329c4ceec5f9668fd42a
重構 pg_dump 的物件組件追蹤以進行轉儲。將 DumpableObject.dump 位元遮罩欄位拆分為單獨的位元遮罩,追蹤請求轉儲的組件(在現有的「dump」欄位中)以及特定物件存在的組件(在新的「components」欄位中)。這擺脫了一些笨拙且容易出錯的邏輯,這些邏輯涉及設定位元然後清除它們。更重要的是,它恢復了最初預期的行為,即不應為我們沒有興趣轉儲的物件執行 pg_dump 的輔助資料收集查詢。當轉儲標誌變成位元遮罩時,該優化被破壞,因為在許多情況下,不相關的位元往往保持設定。由於「components」欄位從最小的位元集開始,並且根據需要添加,因此將其與「dump」進行 AND 運算可以可靠地指示我們實際需要轉儲的內容,而無需使管理請求位元的邏輯複雜化。當例如擴充功能中有許多函數時,這會顯著影響所需的查詢數量。討論:https://postgr.es/m/2273648.1634764485@sss.pgh.pa.us 討論:https://postgr.es/m/7d7eb6128f40401d81b3b7a898b6b4de@W2012-02.nidsa.loc https://git.postgresql.org/pg/commitdiff/5209c0ba0bfd16f23e38f707e487c0626e70564c
重新考慮 pg_dump 對物件 ACL 的處理方式。丟棄大部分現有邏輯,因為它非常低效,需要執行昂貴的子查詢來收集我們很可能沒有興趣轉儲的 ACL 數據。將初始每個物件類型查詢中的 ACL 處理減少到僅僅是收集目錄 ACL 欄位,就像原來一樣。在單個目錄掃描中單獨獲取 pg_init_privs 數據,並在客戶端進行合併計算。刪除用於 pre-9.6 源伺服器的單獨程式碼路徑;沒有充分的理由將它們與恰好具有空 pg_init_privs 的較新伺服器區別對待。討論:https://postgr.es/m/2273648.1634764485@sss.pgh.pa.us 討論:https://postgr.es/m/7d7eb6128f40401d81b3b7a898b6b4de@W2012-02.nidsa.loc https://git.postgresql.org/pg/commitdiff/0c9d84427f441602425b0e18be5cfe751d1d8ebe
延後在 pg_dump 中呼叫不安全的伺服器端函式。避免在我們取得相關資料表的鎖定之前呼叫 pg_get_partkeydef()、pg_get_expr(relpartbound) 和 regtypeout。現有的程式碼在發生任何並行的 DROP TABLE 命令(包括其他 session 的暫存資料表刪除)時,存在嚴重的失敗風險。可以說這是一個應該向後移植的錯誤修復,但它具有一定程度的侵入性,而且我們沒有收到太多關於此類失敗的投訴。我們先將其放入 HEAD 中。討論:https://postgr.es/m/2273648.1634764485@sss.pgh.pa.us 討論:https://postgr.es/m/7d7eb6128f40401d81b3b7a898b6b4de@W2012-02.nidsa.loc https://git.postgresql.org/pg/commitdiff/e3fcbbd623b9ccc16cdbda374654d91a4727d173
避免在 pg_dump 中效能關鍵路徑中執行每個物件的查詢。不要針對每個要傾印的資料表發出輔助資料收集查詢,而是只發出一個查詢,並使用 WHERE 子句將其限制為僅應用於我們打算傾印的資料表。索引、約束和觸發器也採用相同的方式。這大大減少了傾印包含許多資料表的資料庫所需的查詢數量。列出許多目標 OID 的 WHERE 子句可能看起來效率低下,但至少在最新的伺服器版本上,這提供了非常顯著的加速。(原則上,同樣的事情也可以對其他物件類型(例如函式)進行,但這需要對 pg_dump 進行大量的重構,因此這些將在後續的修補程式中以不同的方式處理。)新的 WHERE 子句依賴於 unnest() 函式,該函式僅存在於 8.4 及更高版本中。我們可以針對較舊的伺服器以不同的方式實現它們,但是目前正在進行的討論可能會導致放棄對 9.2 之前的伺服器的 pg_dump 支援,因此這似乎是浪費時間。目前,只需將伺服器版本檢查提升到要求 >= 8.4,而無需停止刪除任何因此被視為無效的程式碼。我們將很快清理這種情況。由我提供的修補程式,基於 Andres Freund 的想法。討論:https://postgr.es/m/7d7eb6128f40401d81b3b7a898b6b4de@W2012-02.nidsa.loc https://git.postgresql.org/pg/commitdiff/9895961529ef8ff3fc12b39229f9a93e08bca7b7
在 pg_dump 中針對重複的每個物件的查詢使用 PREPARE/EXECUTE。對於函式等物件,pg_dump 針對每個要傾印的物件發出相同的輔助資料收集查詢。這不容易重構以避免重複的查詢,但我們可以 PREPARE 這些查詢以降低規劃成本。此修補程式將該想法應用於函式、聚合、運算子和資料類型。雖然可以進一步執行,但剩餘的物件類型不太可能在典型的資料庫中出現足夠的次數,以至於值得擔心。此外,如果沒有至少幾十個物件可以應用準備好的查詢,則執行 PREPARE 可能是淨損失。討論:https://postgr.es/m/7d7eb6128f40401d81b3b7a898b6b4de@W2012-02.nidsa.loc https://git.postgresql.org/pg/commitdiff/be85727a3df743a1f7e93b41dd7ac2b667e8ae04
在排程並行傾印時,考慮 TOAST 資料。在並行模式下,pg_dump 嘗試首先對最大的資料表資料傾印作業進行排序。但是,它僅查詢 pg_class.relpages 值來確定資料表大小。這會忽略 TOAST 資料,因此在某些大型資料表主要為 TOASTed 資料,而其他資料表只有很少資料的情況下,我們可能會做出錯誤的排程決策。為了修復,也添加 TOAST 資料表的 relpages 值。此修補程式還修復了潛在的整數溢位問題,這可能導致在 off_t 僅為 32 位元的機器上進行不良的排程。此類平台可能在野外已經絕跡,但我們仍然名義上支援它們,因此進行修復。根據 Hans Buschmann 的投訴。討論:https://postgr.es/m/7d7eb6128f40401d81b3b7a898b6b4de@W2012-02.nidsa.loc https://git.postgresql.org/pg/commitdiff/65aaed22a849c0763f38f81338a1cad04ffc0e2c
在 Windows 上,關閉用戶端 socket 時也呼叫 shutdown()。進一步的實驗表明,當使用(某些版本的?)OpenSSL 時,commit 6051857fc 不夠。原因很模糊,但呼叫 shutdown(socket, SD_SEND) 可以改善情況。根據 Andrew Dunstan 和 Alexander Lakhin 的測試。像以前一樣向後移植。討論:https://postgr.es/m/af5e0bf3-6a61-bb97-6cba-061ddf22ff6b@dunslane.net https://git.postgresql.org/pg/commitdiff/ed52c3707bcf8858defb0d9de4b55f5c7f18fed7
文件:改進 xfunc-c-type-table。列出類型 numeric 和 timestamptz,它們似乎從未包含在此處。恢復 bigint,它無疑是在 v12 中意外刪除的。修復一些錯誤,或至少是過時的用法(沒有人再將 float 引數宣告為 "float8*",即使它們在底層可能是這樣)。重新按字母順序排列。刪除似乎聲稱這是內建類型完整列表的聲明。根據 Oskar Stenberg 的提問。討論:https://postgr.es/m/HE1PR03MB2971DE2527ECE1E99D6C19A8F96E9@HE1PR03MB2971.eurprd03.prod.outlook.com https://git.postgresql.org/pg/commitdiff/6f0e6ab04de5f52e4e0872d3ace2bb6a35e8b0b1
為「內部使用」類型建立新的類型類別。從歷史上看,我們已將類型「char」放入 S(字串)typcategory 中,儘管考慮到它只能儲存一個位元組,稱其為字串有些牽強。(在我們的實際用法中,它更像是一個枚舉。)鑑於 parse_func.c 和 parse_coerce.c 針對 TYPCATEGORY_STRING 的特殊啟發式,現在這種選擇似乎是錯誤的:對於「char」來說,具有那些優先轉換行為並不是一個好主意。更糟糕的是,最近發明特殊用途類型(例如 pg_node_tree)的修補程式已將 typcategory S 指派給這些類型,這意味著它們也會獲得優先轉換處理,這種處理是基於它們可以保存任意文字的假設而設計的。為了修復,為內部使用類型發明一個新的類別 TYPCATEGORY_INTERNAL,並將其指派給所有這些類型。我使用了程式碼 'Z',因為沒有更好的想法('I' 已經被使用)。此變更會破壞 psql/describe.c 中的一個查詢,現在需要先將目錄「char」欄位顯式轉換為文字,然後再將其與未修飾的文字連接。此外,contrib/citext 中的一個測試案例現在需要顯式轉換才能將 citext 轉換為「char」。由於此變更的目的是不讓「char」成為令人驚訝的可用轉換目標,因此這些破壞似乎是可以接受的。根據 Ian Campbell 的報告。討論:https://postgr.es/m/2216388.1638480141@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/07eee5a0dc642d26f44d65c4e6263304208e8583
實作 poly_distance()。geo_ops.c 包含六個函數,它們只是拋出 ERRCODE_FEATURE_NOT_SUPPORTED 的存根。由於這種情況已經持續超過二十年,顯然對填補這些存根沒有太大的興趣。然而,我對於刪除 poly_distance() 感到不安,因為每個其他的幾何類型都支援一個與另一個相同類型物件的距離函數。我們可以透過參考 poly_overlap() 和 path_distance() 來輕鬆地添加此功能。此功能的(現有)測試案例可能會顯示一些數值不穩定性,但希望建置場 (buildfarm) 會發現它。順便一提,改進文件,試圖解釋為什麼多邊形首先與封閉路徑不同。討論:https://postgr.es/m/3426566.1638832718@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/c5c192d7bdfa78f19e735610488b1cc5ad6e41cc
文件:移除未實作的幾何運算子的文件。在 commit 791090bd7 中,我努力填寫 pg_operator 中列出的所有幾何運算子的文件。然而,現在看來,至少有些遺漏可能是故意的,因為某些運算子條目指向未實作的存根函數。再次從文件中移除它們。(在 HEAD 中,poly_distance 保留,因為 c5c192d7b 剛剛為其添加了實作。)根據 Anton Voloshin 的抱怨。討論:https://postgr.es/m/3426566.1638832718@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/922b23c13be075595c2abc67736b214cb90f84d9
移除未實作/未記載的幾何函數和運算子。在長達二十多年的時間裡,沒有人填補這些存根,所以現在該放棄它們可能會在某天被實作的想法了。相關的 pg_operator 和 pg_proc 條目只是令人困惑的空間浪費。根據 Anton Voloshin 的抱怨。討論:https://postgr.es/m/3426566.1638832718@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/189699dd3680d85c74c3886b33d9a9f83301defd
修正 logtape.c 的 right_offset() 中的資料類型混淆。只有在 (a) long 比 int 更寬,並且 (b) 空閒區塊的堆積超過 UINT_MAX 個條目的情況下,這才可能產生影響,這似乎不太可能。不過,這仍然是一個理論上的錯誤,所以回溯到 v13,其中出現了這個拼字錯誤(在 commit c02fdc922 中)。順便一提,也讓 swap_nodes() 使用一致的資料類型。Ma Liangzhu 討論:https://postgr.es/m/17336-fc4e522d26a750fd@postgresql.org https://git.postgresql.org/pg/commitdiff/2de3c1015cb2556af501c630b1768a20f111fe95
改進 binaryheap.c 和 logtape.c 中的 sift up/down 程式碼。借用長期以來在 tuplesort.c 中使用的邏輯:不要物理性地交換兩個堆積條目中的資料,而是將正在 sift up 或 down 的值保存在局部變數中,並僅在必要時移動其他值。這使得程式碼更短且更快。目前尚不清楚是否有任何現有的調用者真正對時間如此敏感以至於會注意到,但我們不妨以相同的方式維護堆積。Ma Liangzhu 和 Tom Lane 討論:https://postgr.es/m/17336-fc4e522d26a750fd@postgresql.org https://git.postgresql.org/pg/commitdiff/a2ff18e89ff8f29677084bffd1e3de9ca6cd7224
移除 pg_dump/pg_dumpall 對於從 pre-9.2 伺服器傾印的支援。根據討論,我們將對舊伺服器的支援限制在那些仍然可以在現代平台上輕鬆建置的分支,目前是 9.2 及更高版本。移除超過一千行專用於從較舊伺服器版本傾印的程式碼。(與先前此類變更一樣,我們不會移除 pg_restore 讀取較舊封存檔案的能力... 儘管很想知道現在如何測試它。)這清理了 commit 989596152 遺留的一些無效程式碼。討論:https://postgr.es/m/2923349.1634942313@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/30e7c175b81d53c0f60f6ad12d1913a6d7d77008
移除 pg_upgrade 對於從 pre-9.2 伺服器升級的支援。根據討論,我們將對舊伺服器的支援限制在那些仍然可以在現代平台上輕鬆建置的分支,目前是 9.2 及更高版本。討論:https://postgr.es/m/2923349.1634942313@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/e469f0aaf3c586c8390bd65923f97d4b1683cd9f
移除 pg_dump 的 --no-synchronized-snapshots 切換開關。有理由使用此切換開關的伺服器版本現在都已停止支援。保留它除了讓粗心的 DBA 自食惡果外,幾乎沒有什麼作用。討論:https://postgr.es/m/556122.1639520324@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/2a712066d0587f65fcecd44e884dc6a09958dbdd
在 lookup_rowtype_tupdesc 等函數之後,始終使用 ReleaseTupleDesc。lookup_rowtype_tupdesc 的 API 規格之前說您可以同時使用 ReleaseTupleDesc 或 DecrTupleDescRefCount。然而,後者的選擇意味著調用者必須確定返回的 tupdesc 是具有參考計數的。我不記得在撰寫此規格時是否始終如此,但自從我們為平行工作者引入共享記錄類型快取以來,它肯定並不總是正確的。這意味著使用 DecrTupleDescRefCount 的調用者取決於他們可能不應該使用的類型快取行為細節。因此,變更 API 規格以說明您必須調用 ReleaseTupleDesc,並修正了六個沒有這樣做的調用者。據我所知,這只是未來的準備,這裡沒有實際錯誤。所以沒有回溯修補。根據 Chapman Flack 的抱怨。討論:https://postgr.es/m/61B901A4.1050808@anastigmatix.net https://git.postgresql.org/pg/commitdiff/bbc227e951ecc59a29205be4952a623e7d1dd534
清理 pg_dump 和 pg_upgrade 中更多新近失效的程式碼。正如 Justin Pryzby 所指出的,我在 30e7c175b 和 e469f0aaf 中遺漏了一些東西。討論:https://postgr.es/m/2923349.1634942313@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/c49d926833fa6a987e3f9a66027f4a01d7a008be
移除 psql 對於 9.2 之前伺服器版本的支援。根據討論,我們將對舊伺服器的支援限制在那些仍然可以在現代平台上輕鬆建置的分支,目前是 9.2 及更高版本。除了刪除在假設伺服器 >= 9.2 的情況下無效的程式碼外,我還調整了對於不受支援版本的啟動警告,以抱怨過於舊的伺服器以及過於新的伺服器。“某些 psql 功能可能無法運作”的警告精確地適用於這兩種情況。討論:https://postgr.es/m/2923349.1634942313@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/cf0cab868aa4758b7eec5f9412f2ec74acda7f45
確保轉換到 typmod -1 會產生 RelabelType。修正 commit 5c056b0c2 變更的程式碼,以便我們總是為未指定的 typmod 產生 RelabelType,而不是其他東西。否則,規劃器最佳化可能不會發生。我們似乎錯過了這一點,因為之前的實驗是在 numeric 類型上進行的:剖析器會不理想地產生對 numeric() 長度強制轉換函數的呼叫,但之後 numeric_support() 會將其最佳化為 RelabelType,因此一切看起來都很好。對於具有未最佳化長度強制轉換函數的類型(例如 bpchar)來說,這會發生錯誤。根據 John Naylor 的報告。回溯修補到所有支援的分支,因為之前的修補程式最終也是如此。不幸的是,這不再包括 9.6 ... 我們真的不應該將這種更改放入接近 EOL 的分支中。討論:https://postgr.es/m/CAFBsxsEfbFHEkouc+FSj+3K1sHipLPbEC67L0SAe-9-da8QtYg@mail.gmail.com https://git.postgresql.org/pg/commitdiff/9c356f4b2dd8f8ff49757287e387ab1d023e4449
在單獨的測試腳本中修正 public schema 的權限。在 commit b073c3ccd 之後,必須授予 PUBLIC 在 public schema 上的建立權限,才能讓許多核心迴歸測試腳本通過。該 commit 透過將 GRANT 新增到首先執行的 tablespace 測試中,以快速簡便的方式實現了這一點。但是,這對於單機複製測試來說是有問題的。在這種設定上執行迴歸測試最不痛苦的方法是跳過 tablespace 測試,但這樣就不再有效了。為了修正這個問題,讓我們發明一個單獨的 "test_setup" 腳本來首先執行,並將 GRANT 放在那裡。還原 b073c3ccd 對 tablespace.source 檔案的更改。將來,最好嘗試透過讓 test_setup 建立廣泛使用的物件來減少各個測試腳本之間的耦合,目標是大多數腳本可以在僅執行 test_setup 之後執行。這需要一些努力,因此此 commit 僅解決我眼前的痛點。討論:https://postgr.es/m/1363170.1639763559@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/944dc45d1b633c4d612cdff9f15153ed609eaa35
移除 pg_dump 中更多無用的程式碼。Coverity 抱怨 dumpFunc() 和 buildACLCommands() 的部分現在無法訪問,實際上它們確實是。移除它們。順便一提,使 dumpFunc 對 protrftypes 的處理與其他欄位之間的差異不要那麼隨意。https://git.postgresql.org/pg/commitdiff/b1c169caf0678a82cf26b5656e01399f6153456b
Peter Geoghegan 推送了
vacuumlazy.c:將 dead_tuples 重命名為 dead_items。 Commit 8523492d 簡化了對於 VACUUM 來說,一個 item 被認為是 "dead" 的含義:記憶體中收集的 TID(為了索引 vacuuming 做準備)必須始終來自 heap page 中的 LP_DEAD stub line pointer,在 pruning 之後找到。這正式確立了索引 vacuuming(和 heap vacuuming)是可選過程的觀點。與 pruning 不同,它們可以無限期地延遲,而不會有違反基本不變量的任何風險。例如,留下 LP_DEAD item 顯然不會增加事務 ID 環繞的風險。沒有事務 ID,就不可能發生事務 ID 環繞。重命名任何引用 DEAD tuples(具有儲存的 tuples)的事物,可以強化所有這些。vacuumlazy.c 之外的程式碼繼續混淆 dead/deleted tuples 和 LP_DEAD item 之間的區別。這是必要的,因為 autovacuum 調度仍然主要由 "dead item/tuple" 統計資料驅動。未來,我們可能會發現將此模型替換為更複雜的模型很有用,作為教導 autovacuum 執行更頻繁的 vacuuming 的一步,以針對那些碰巧更容易因版本更迭而膨脹的個別索引。順便一提,簡化一些處理 VACUUM 的 dead_items 陣列的函數簽名。作者:Peter Geoghegan pg@bowt.ie 審閱人:Masahiko Sawada sawada.mshk@gmail.com 討論:https://postgr.es/m/CAH2-WzktGBg4si6DEdmq3q6SoXSDqNi6MtmB8CmmTmvhsxDTLA@mail.gmail.com https://git.postgresql.org/pg/commitdiff/4f8d9d1217956798e761491d236af576b27f5e12
vacuumlazy.c:修正剩餘的 "dead tuple" 引用。 commit 4f8d9d12 的疏忽。報告人:Masahiko Sawada sawada.mshk@gmail.com 討論:https://postgr.es/m/CAD21AoDm38Em0bvRqeQKr4HPvOj65Y8cUgCP4idMk39iaLrxyw@mail.gmail.com https://git.postgresql.org/pg/commitdiff/4bdfe6855901a4104dbdac2be53d465b626e244d
標準化 cleanup lock 術語。術語 "super-exclusive lock" 是 "buffer cleanup lock" 的同義詞,它首先出現在多年前的 nbtree 中。透過一致使用術語 cleanup lock 來標準化。這完成了 commit 276db875 開始的工作。沒有充分的理由使用兩個術語。但是,只有一個術語才有充分的理由:避免對 VACUUM 在 ambulkdelete 呼叫期間,為什麼在索引 AM 中獲取完整的 cleanup lock(而不僅僅是普通的 exclusive lock)感到困惑。這與保護物理索引資料結構本身無關。需要它來實作鎖定協定,以確保指向 heap/table 結構的 TID 在安全之前不會被 VACUUM 標記為回收(這有點類似於 VACUUM 如何在其第一次 heap pass 期間使用 cleanup lock)。請注意,索引 AM 並非絕對需要實作此鎖定協定——一些索引 AM 使用 MVCC 快照作為其唯一的互鎖來防止不安全的 TID 回收。順便一提,更新 nbtree README。將前面提到的索引 vacuuming 鎖定協定的討論與 commit 2ed5b87f 添加的 "drop leaf page pin" 最佳化的討論清楚地分開。我們現在透過描述個別索引掃描如何安全地選擇不應用標準鎖定協定(因此可以避免阻礙 VACUUM 的進度)來構建對後者的討論。此外,記錄為什麼在 nbtree 僅索引掃描期間應用該最佳化是不安全的。作者:Peter Geoghegan pg@bowt.ie 討論:https://postgr.es/m/CAH2-WzngHgQa92tz6NQihf4nxJwRzCV36yMJO_i8dS+2mgEVKw@mail.gmail.com 討論:https://postgr.es/m/CAH2-WzkHPgsBBvGWjz=8PjNhDefy7XRkDKiT5NxMs-n5ZCf2dA@mail.gmail.com https://git.postgresql.org/pg/commitdiff/bcf60585e6e0e95f0b9e5d64c7a6edca99ec6e86
Amit Kapila 推送了
新增一個視圖以顯示訂閱 workers 的統計資訊。此 commit 新增了一個新的系統視圖 pg_stat_subscription_workers,該視圖顯示了在應用邏輯複製變更以及執行初始表同步期間發生的任何錯誤的相關資訊。當移除相應的訂閱時,訂閱統計資訊條目也會被移除。它還新增了一個 SQL 函數 pg_stat_reset_subscription_worker() 來重設單個訂閱錯誤。即將到來的修補程式可以使用此視圖的內容來跳過與訂閱者上的現有資料衝突的特定交易。將來可以擴展此視圖,以追蹤其他與 xact 相關的統計資訊,例如訂閱 workers 提交/中止的 xact 數量。作者:Masahiko Sawada 審閱人:Greg Nancarrow、Hou Zhijie、Tang Haiying、Vignesh C、Dilip Kumar、Takamichi Osumi、Amit Kapila 討論:https://postgr.es/m/CAD21AoDeScrsHhLyEPYqN3sydg6PxAPVBboK=30xJfUVihNZDA@mail.gmail.com https://git.postgresql.org/pg/commitdiff/8d74fc96db5fd547e077bf9bf4c3b67f821d71cd
文件:在邏輯複製期間新增 "Attach Partition" 限制。將表 ATTACH 到其根目錄使用 publication with publish_via_partition_root 設定為 true 發佈的分割區樹中,不會導致表的現有內容被複製。發生這種情況是因為訂閱者不考慮複製新附加的分割區,因為根表已處於 'ready' 狀態。此行為是在 PG13 (83fd4532a7) 中引入的,我們允許透過祖先發佈分割區變更。我們可以考慮在未來修正此限制。作者:Amit Langote 審閱人:Hou Zhijie、Amit Kapila Backpatch-through:13 討論:https://postgr.es/m/OS0PR01MB5716E97F00732B52DC2BBC2594989@OS0PR01MB5716.jpnprd01.prod.outlook.com https://git.postgresql.org/pg/commitdiff/eb7828f54a44843a64a23d0891d7eb6018c0749e
修正了 commit 8d74fc96db 導致的回歸測試失敗。這些測試沒有考慮到與套用變更無關的錯誤,例如「具有 OID %d 的複寫來源已啟用...」,可能會在資料表同步工作程序開始複製變更之前發生。為了使測試更穩健,我們需要檢查預期的錯誤以及錯誤的來源,這將是資料表同步或套用工作程序。順便一提,從 Create Subscription 命令中移除無害的選項「streaming = off」,因為無論如何這都是預設值。作者:Masahiko Sawada 審閱者:Hou Zhijie, Vignesh C, Amit Kapila 討論:https://postgr.es/m/CAD21AoDeScrsHhLyEPYqN3sydg6PxAPVBboK=30xJfUVihNZDA@mail.gmail.com 討論:https://postgr.es/m/E1mrtvV-0002Gz-73@gemulon.postgresql.org https://git.postgresql.org/pg/commitdiff/41e66fee051619ab84828814554f73556a958850
移除 pg_publication_tables 檢視表中的重複結果。對於同時具有子資料表和父資料表,且以 publish_via_partition_root 為 false 發佈的發佈,我們會顯示子資料表中重複的值,這不是使用者所期望的。我們決定不將此錯誤修正回溯,因為沒有使用者抱怨此問題,而且這似乎不是一個關鍵問題。作者:Hou Zhijie 審閱者:Bharath Rupireddy, Amit Langote, Amit Kapila 討論:https://postgr.es/m/OS0PR01MB5716E97F00732B52DC2BBC2594989@OS0PR01MB5716.jpnprd01.prod.outlook.com https://git.postgresql.org/pg/commitdiff/a61bff2bf479cfebda18a1655323eec1b19370de
修正變更 ALL TABLES IN SCHEMA 發佈的所有權。確保 ALL TABLES IN SCHEMA 發佈的新擁有者必須是超級使用者。CREATE PUBLICATION 期間已確保相同。作者:Vignesh C 審閱者:Nathan Bossart, Greg Nancarrow, Michael Paquier, Haiying Tang 討論:https://postgr.es/m/CALDaNm0E5U-RqxFuFrkZrQeG7ae5trGa=xs=iRtPPHULtT4zOw@mail.gmail.com https://git.postgresql.org/pg/commitdiff/1a2aaeb0db1bccd97140d479c4247127f6cb9378
修正 ROLLBACK PREPARED 操作解碼期間的來源時間戳記。發生這種情況是因為我們將不正確的引數傳遞給 ReorderBufferFinishPrepared()。作者:Masahiko Sawada 審閱者:Vignesh C 回溯修補:14 討論:https://postgr.es/m/CAD21AoBqhUqgDZUhUVnnwKRubPDNJ6m6fJDPgok3E5cWJLL+pA@mail.gmail.com https://git.postgresql.org/pg/commitdiff/e464cb7af317e216fef9bfe19a7c4df542817012
修正了子資料表資料的雙重發佈。對於同時具有子資料表和父資料表,且以 publish_via_partition_root 為 true 發佈的發佈,我們會發佈兩次子資料表的資料。發生這種情況是因為訂閱者將使用父資料表和子資料表啟動同步,因為它會在初始資料表清單中將兩者作為單獨的資料表取得。確保在這種情況下,pg_publication_tables 僅傳回父資料表。作者:Hou Zhijie 審閱者:Greg Nancarrow, Amit Langote, Vignesh C, Amit Kapila 回溯修補:13 討論:https://postgr.es/m/OS0PR01MB57167F45D481F78CDC5986F794B99@OS0PR01MB5716.jpnprd01.prod.outlook.com https://git.postgresql.org/pg/commitdiff/5e97905a2c764d4ca36f5c6cccd0ebbf157b9df4
改進平行 vacuum 實作。先前,在平行 vacuum 中,我們僅為平行索引 vacuuming 安全的索引分配 IndexBulkDeleteResult 的 shmem 區域,並在 shmem 區域中具有 null-bitmap 來存取它們。這種邏輯太複雜了,只能節省每個索引幾個位元的小優勢。在此 commit 中,我們為 LVParallelIndStats 陣列分配了一個專用的 shmem 區域,其中包含平行安全旗標、索引 vacuum 狀態和 IndexBulkdeleteResult。每個索引都有一個陣列元素,即使是那些平行索引 vacuuming 不安全或不值得的索引也是如此。此 commit 透過移除所有與點陣圖相關的程式碼,使程式碼更清晰。此外,在平行索引 vacuuming 之後新增檢查每個索引 vacuum 狀態,以確保已處理所有索引。最後,為了保持一致性,將平行 vacuum 函數重新命名為 parallel_vacuum_*。作者:Masahiko Sawada,基於 Andres Freund 的建議 審閱者:Hou Zhijie, Amit Kapila 討論:https://postgres.tw/message-id/20211030212101.ae3qcouatwmy7tbr%40alap3.anarazel.de https://git.postgresql.org/pg/commitdiff/22bd3cbe0c284758d7174321f5596763095cdd55
Daniel Gustafsson 推送
擴展 configure_test_server_for_ssl 以新增擴充功能。為了能夠使用 SSL 連線測試擴充功能,允許 configure_test_server_for_ssl 建立作為陣列傳遞的任何擴充功能。每個擴充功能都會在所有測試資料庫中建立。審閱者:Tom Lane tgl@sss.pgh.pa.us 審閱者:Andrew Dunstan andrew@dunslane.net 審閱者:Dagfinn Ilmari Mannsåker ilmari@ilmari.org 討論:https://postgr.es/m/E23F9811-0C77-45DA-912F-D809AB140741@yesql.se https://git.postgresql.org/pg/commitdiff/879fc1a579cc2e2e1dbb79686668b4de2071ab83
為 contrib/sslinfo 新增 TAP 測試。這將 sslinfo 擴充功能的初步涵蓋範圍新增到 SSL 測試工具中。透過與 pg_stat_ssl 比較來驗證輸出,以便在底層憑證略有更改時提供一定程度的測試穩定性。新增了一個新的憑證以提供一個針對其進行測試的擴充功能。審閱者:Tom Lane tgl@sss.pgh.pa.us 審閱者:Andrew Dunstan andrew@dunslane.net 審閱者:Dagfinn Ilmari Mannsåker ilmari@ilmari.org 討論:https://postgr.es/m/E23F9811-0C77-45DA-912F-D809AB140741@yesql.se https://git.postgresql.org/pg/commitdiff/ae81776a23f78babc9707e22f95dea15aa2dbcd2
在 SSL 測試期間,使用特定於測試的 temp 路徑作為金鑰。SSL 和 SCRAM TAP 測試套件都使用所提供測試金鑰的暫時副本,以確保正確的權限。然而,這些金鑰是使用暫時檔案名稱而不是真正的暫時資料夾複製到樹狀結構內的。透過使用 PostgreSQL::Test::Utils 提供的 tmp_check 來修正。Tom Lane 在審閱附近的 sslinfo TAP 測試修補程式時發現。審閱者:Tom Lane tgl@sss.pgh.pa.us 討論:https://postgr.es/m/599244.1638041239@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/c113d8ad50d62bfcc16bbd5ceec91122e0046ede
從一般使用的變數中移除 PF_USED_FOR_ASSERTS_ONLY。process_pending_requests (在 postgres_fdw.c 中) 中的 fsstate 在 8998e3cafa2 中新增為僅限斷言的變數,1ec7fca8592 聲明在斷言之外使用該變數。get_index_column_opclass (在 lsyscache.c 中) 中的 rd_index 在 2a6368343ff 中引入,然後在修復 commit 7e041603904 中迅速使用。這會從上述變數中移除 PG_USED_FOR_ASSERTS_ONLY 變數裝飾。審閱者:Greg Nancarrow gregn4422@gmail.com 討論:https://postgr.es/m/F959106C-0F21-43A5-B2AE-D007D51ACBEE@yesql.se https://git.postgresql.org/pg/commitdiff/ac0db34e0e5c7ee6f8b5c33c264de3e671fbd4f7
在 MSVC 中停用未使用的變數警告 C4101。未使用的變數的 C4101 警告無法使用 PG_USED_FOR_ASSERTS_ONLY 單獨抑制,因此會對定義但僅在斷言中讀取/寫入的變數產生誤報警告。在找到針對每個變數進行抑制的令人滿意的解決方案 (例如我們對 gcc 和 clang 所做的方式) 之前,請停用警告。討論:https://postgr.es/m/CAJcOf-c+KniGAp31pn8TC=9a-WHXpkX-3+8-2BkaCsZchhu=8w@mail.gmail.com https://git.postgresql.org/pg/commitdiff/e7122548a3f754060db1767582148b3559fe8d43
擴展私鑰 stat 檢查錯誤處理。如果私鑰上的 stat 操作失敗,程式碼會假定這是由於 ENOENT 造成的,但這可能不正確。透過列印非 ENOENT 錯誤的不同錯誤訊息來擴展檢查,以便更輕鬆地進行偵錯。根據 Tom Lane 的建議,這是由於 buildfarm 中的 fairywren 動物出現的問題所致。討論:https://postgr.es/m/1632478.1638305700@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/538724fc36e05339ea3734f1b886a67398fce71a
移除註解中提及的 TimeLineID 更新。Commit 4a92a1c3d 移除了 RecoveryInProgress 中的 TimeLineID 更新,請相應地更新註解。作者:Amul Sul sulamul@gmail.com 討論:https://postgr.es/m/CAAJ_b96wyzs8N45jc-kYd-bTE02hRWQieLZRpsUtNbhap7_PuQ@mail.gmail.com https://git.postgresql.org/pg/commitdiff/018b800245c5d4db30d204fa42fada05a64eb287
修正憑證路徑以使用 perl2host。Commit c113d8ad50 將憑證的複製移至測試期間的暫時路徑,而非使用原始碼樹。這導致 msys 上的測試失敗,因為絕對路徑未針對 msys 平台進行調整。請確保在使用 perl2host 轉換路徑後再進行複製並傳入連線字串。同時,使所有測試套件中的憑證複製錯誤處理保持一致。討論:https://postgr.es/m/YacT3tm97xziSUFw@paquier.xyz https://git.postgresql.org/pg/commitdiff/c3b34a0ff4a00d00d6ea364c85201e155ca7ef6b
修正在 Windows 上連線字串中的路徑分隔符。Commit c113d8ad50 中產生的暫時路徑無法直接在 Windows 上的連線字串中使用,因為路徑分隔的反斜線將被視為跳脫字元。透過將反斜線轉換為斜線來修正此問題,如同其他測試中類似的路徑用例。報告者:Andres Freund andres@anarazel.de 討論:https://postgr.es/m/20211202195130.e7pprpsx4ell22sp@alap3.anarazel.de https://git.postgresql.org/pg/commitdiff/49422ad0cc88c91a38522b2a7b222c2f2c939f82
文件:修正 CRL 參數的誤導性措辭。ssl_crl_file 和 ssl_crl_dir 都用於客戶端憑證撤銷,而不是伺服器憑證。這些參數的描述很容易被誤解為相反的意思,正如導致此修復的錯誤報告所證明的那樣。同樣地,擴充 sslcrl 和 sslcrldir 以明確提及伺服器憑證。同時,在先前僅討論 sslcrl 的地方提及 sslcrldir。向下回溯到 v10,CRL 目錄修復則回溯到引入它們的 14。作者:Kyotaro Horiguchi horikyota.ntt@gmail.com 審閱者:Peter Eisentraut peter.eisentraut@enterprisedb.com 討論:https://postgr.es/m/20211202.135441.590555657708629486.horikyota.ntt@gmail.com 討論:https://postgr.es/m/CABWY_HCBUCjY1EJHrEGePGEaSZ5b29apgTohCyygtsqe_ySYng@mail.gmail.com Backpatch-through: 10 https://git.postgresql.org/pg/commitdiff/fadac33bb8de1cb9005aed07cdd059ba1fa9c6f8
Álvaro Herrera 推送
Tomáš Vondra 推送
在檢查 HOT 更新時忽略 BRIN 索引。當確定是否可以使用 HOT 跳過索引更新時,我們可以忽略僅由 BRIN 索引建立索引的屬性。BRIN 中沒有指向個別 tuple 的索引指標,並且頁面範圍摘要無論如何都會更新,因為它依賴於可見性資訊。這也移除了 rd_indexattr 列表,並將其替換為 rd_attrsvalid 標誌。該列表未在任何地方使用,並且一個簡單的標誌就足夠了。Josef Simanek 的 Patch,我進行了各種修復和改進。作者:Josef Simanek 審閱者:Tomas Vondra, Alvaro Herrera 討論:https://postgr.es/m/CAFp7QwpMRGcDAQumN7onN9HjrJ3u4X3ZRXdGFT0K5G2JWvnbWg%40mail.gmail.com https://git.postgresql.org/pg/commitdiff/5753d4ee320b3f6fb2ff734667a1ce1d9d8615a1
將 bool 新增至 btree_gist 文件。Commit 57e3c516 將 bool opclass 新增至 btree_gist,但更新文件中的資料類型列表以反映此變更。報告者:Pavel Luzanov 討論:https://postgr.es/m/CAE2gYzyDKJBZngssR84VGZEN=Ux=V9FV23QfPgo+7-yYnKKg4g@mail.gmail.com https://git.postgresql.org/pg/commitdiff/4c6145b514fa62535f8a5029283de3a54d9cfd53
將 BRIN HOT 行為的測試移至 stats.sql。5753d4ee32 新增的測試依賴於統計資料收集器,因此當 UDP 封包遺失時,它可能會偶爾失敗。某些機器可能容易受到影響,可能取決於負載等。將測試移至 stats.sql,已知此檔案已存在此問題,並且人們知道忽略它。報告者:Justin Pryzby 討論:https://postgr.es/m/CAFp7QwpMRGcDAQumN7onN9HjrJ3u4X3ZRXdGFT0K5G2JWvnbWg%40mail.gmail.com https://git.postgresql.org/pg/commitdiff/fe60b67250a31cd1ac2a4882f12e199e30abd316
Peter Eisentraut 推送
文件:關於何時使用參考動作的一些其他資訊。https://git.postgresql.org/pg/commitdiff/5786fe154b53caef8b226ed863312d3608b32a51
對具有擴充功能保留字首的不存在設定發出 SET 警告。擴充功能已經可以使用 EmitWarningsOnPlaceholders() 事實上保留 GUC 字首。但是,這僅針對擴充功能載入時(或擴充功能選擇呼叫此函數時)存在的設定進行檢查。當 SET 命令稍後使用具有自訂字首的不存在設定時,不會給出診斷。透過此變更,EmitWarningsOnPlaceholders() 會將其保留的字首儲存在列表中,並且當 SET 找到「佔位符」設定時,會檢查它是否屬於保留字首,並在這種情況下發出警告。新增一個回歸測試,該測試使用「plpgsql」註冊字首來檢查修補程式。作者:Florin Irion florin.irion@enterprisedb.com 討論:https://postgres.tw/message-id/flat/CA+HEvJDhWuuTpGTJT9Tgbdzm4QS4EzPAwDBScWK18H2Q=FVJFw@mail.gmail.com https://git.postgresql.org/pg/commitdiff/75d22069e00d638d08c04e3aba71688f3fb002ed
改善掃描器檔案中的一些註解。審閱者:John Naylor john.naylor@enterprisedb.com 討論:https://postgres.tw/message-id/flat/b239564c-cad0-b23e-c57e-166d883cb97d@enterprisedb.com https://git.postgresql.org/pg/commitdiff/fb7f70112fd80f13a8f124f51c4992fe290d3836
移除未使用的包含。這些很久以前就不需要了。審閱者:John Naylor john.naylor@enterprisedb.com 討論:https://postgres.tw/message-id/flat/b239564c-cad0-b23e-c57e-166d883cb97d@enterprisedb.com https://git.postgresql.org/pg/commitdiff/89d1c15d64602b0c27ed87c717f586ddf6cf310d
pg_dump:新增遺失的 relkind 案例。在 guessConstraintInheritance() 中忘記檢查 RELKIND_MATVIEW。這不是一個實際問題,因為它在 flagInhTables() 中檢查哪些 relkind 可以有父項,並且在之後這些條目的 numParents 將為 0。但在討論之後,人們認為此處應與 flagInhTables() 和 flagInhAttrs() 保持一致。審閱者:Michael Paquier michael@paquier.xyz 討論:https://postgres.tw/message-id/flat/a574c8f1-9c84-93ad-a9e5-65233d6fc00f@enterprisedb.com https://git.postgresql.org/pg/commitdiff/a22d6a2cb62c4fc6d7c4b077d8014fd4ffaec426
一些 RELKIND 巨集重構。新增更多巨集以將一些 RELKIND_* 巨集分組:- RELKIND_HAS_PARTITIONS() - RELKIND_HAS_TABLESPACE() - RELKIND_HAS_TABLE_AM() 審閱者:Michael Paquier michael@paquier.xyz 審閱者:Alvaro Herrera alvherre@alvh.no-ip.org 討論:https://postgres.tw/message-id/flat/a574c8f1-9c84-93ad-a9e5-65233d6fc00f%40enterprisedb.com https://git.postgresql.org/pg/commitdiff/37b2764593c073ca61c2baebd7d85666e553928b
修正了對 PG_GETARG_UINT32() 不恰當的使用。chr() 函式使用了 PG_GETARG_UINT32(),即使參數被宣告為(帶正負號的)整數。因此,你可以將負數參數傳遞給這個函式,它會在內部將它們解釋為正數。最終結果是無害的,但似乎不正確,因此修正了這個問題,並重新安排了內部錯誤檢查以適應此情況。另一個案例是在文件中,範例程式碼使用了 PG_GETARG_UINT32(),其參數被宣告為帶正負號的整數。Reviewed-by: Nathan Bossart bossartn@amazon.com Discussion: https://postgres.tw/message-id/flat/7e43869b-d412-8f81-30a3-809783edc9a3%40enterprisedb.com https://git.postgresql.org/pg/commitdiff/e9e63b7022ddd0aaaae7cd439daa234cf9e6a21c
更新 snowball。更新至 snowball 標籤 v2.2.0。僅有小幅變更。 https://git.postgresql.org/pg/commitdiff/bba962f0c052bfab79df79ac5629eac5eab5b842
pgcrypto:從測試中移除明確的十六進位編碼/解碼。這是因為在 bytea 中尚無法使用十六進位格式。現在我們可以移除額外的明確編碼/解碼呼叫,並依賴預設輸出格式。Discussion: https://postgres.tw/message-id/flat/17dcb4f7-7ac1-e2b6-d5f7-2dfba06cd9ee%40enterprisedb.com https://git.postgresql.org/pg/commitdiff/814e1d9ff7a853b16a544a244bfa92e8388be248
pgrowlocks:修正了不正確的格式佔位符。Transaction ID 應以 unsigned 格式列印,類似於 xidout()。 https://git.postgresql.org/pg/commitdiff/254c63e9eda0b006fb61b9dc23970a6381efd061
允許為 foreign key ON DELETE SET 動作指定欄位列表。透過允許指定欄位列表來擴充 foreign key ON DELETE 動作 SET NULL 和 SET DEFAULT,例如 CREATE TABLE posts ( ... FOREIGN KEY (tenant_id, author_id) REFERENCES users ON DELETE SET NULL (author_id) ); 如果指定了欄位列表,則僅將這些欄位設定為 null/default,而不是 foreign-key 限制中的所有欄位。這對於多租戶或分片 schema 很有用,在這些 schema 中,租戶或分片 ID 包含在所有表格的主鍵中,但不應將其設定為 null。Author: Paul Martinez paulmtz@google.com Discussion: https://postgres.tw/message-id/flat/CACqFVBZQyMYJV=njbSMxf+rbDHpx=W=B7AEaMKn8dWn9OZJY7w@mail.gmail.com https://git.postgresql.org/pg/commitdiff/d6f96ed94e73052f99a2e545ed17a8b2fdc1fb8a
pg_checksums:修正資料類型。分段編號應為 int,而不是 BlockNumber(另請參閱 buffile.c)。可能沒有危害,但為了保持一致性更好。 https://git.postgresql.org/pg/commitdiff/bf9a55c10729988a3c7ffbe14108e29d90283939
簡化通用的 64 位元整數剖析 API。pg_strtouint64() 是 strtoull/strtoul/_strtoui64 的包裝函式,但似乎不再需要這種間接方式。msvc/Solution.pm 聲稱 HAVE_STRTOULL,因此「僅限 MSVC」部分似乎是不必要的。此外,我們在 c.h 中有程式碼可以用替代方案替換 strtoull() (如果找不到),這似乎涵蓋了目前所有支援的平台,因此在 pg_strtouint64() 中進一步的回退似乎是不必要的。因此,我們可以移除 pg_strtouint64(),並在所有呼叫站點中直接使用 strtoull()。但是,為完全 64 位元整數的剖析保留單獨的標記似乎很有用,以匹配類型定義 int64/uint64。為此,在 c.h 中新增巨集 strtoi64() 和 strtou64() 作為 strtol()/strtoul() 或 strtoll()/stroull() 的精簡包裝函式。這使得這些函式在所有地方都可以使用,而不僅僅是在伺服器程式碼中,並且使得函式命名與 numutils.c 中的 pg_strtointNN() 函式明顯不同,後者具有不同的 API。Discussion: https://postgres.tw/message-id/flat/a3df47c9-b1b4-29f2-7e91-427baf8b75a3%40enterprisedb.com https://git.postgresql.org/pg/commitdiff/3c6f8c011f85df7b35c32f4ccaac5c86c9064a4a
Robert Haas 推送
記錄 tar 封存檔現在已正確終止。Commit 5a1007a5088cd6ddf892f7422ea8dbaef362372f 變更了伺服器行為,但我沒有注意到現有行為已記錄在案,因此沒有更新文件。此 commit 執行此操作。我選擇提及行為已變更,而不是僅刪除對標準偏差的引用。這似乎對工具作者有所幫助。Discussion: http://postgr.es/m/CA+TgmoaYZbz0=Yk797aOJwkGJC-LK3iXn+wzzMx7KdwNpZhS5g@mail.gmail.com https://git.postgresql.org/pg/commitdiff/81fca310b38e7808dff9c01a26564e8f2db10893
預設為 log_checkpoints=on, log_autovacuum_min_duration=10m。這裡的想法是,當已知在特定時間點發生效能問題時,如果可以從日誌中獲得一些資訊來幫助弄清楚該時間點前後可能發生的情況,那將是一件好事。此變更引起了高於平均水準的異議,因為這意味著即使沒有發生任何問題,具有預設設定的伺服器也會產生一些日誌輸出。但是,根據我的計算,郵件列表討論中贊成該變更的人數大約是反對者的兩倍。相信額外的日誌輸出在實踐中不是問題的原因是: (1) 在正確設定的系統上,此設定可以產生的訊息速率限制為每隔幾分鐘一次,以及 (2) 生產系統往往由於失敗的連線嘗試、應用程式活動產生的 ERROR 訊息等原因而在日誌中包含更多垃圾。Bharath Rupireddy,經 Fujii Masao 和我審閱。許多其他人對此執行緒發表了評論,但據我所知,那是對變更優點的討論,而不是對修補程式的審閱。Discussion: https://postgr.es/m/CALj2ACX-rW_OeDcp4gqrFUAkf1f50Fnh138dmkd0JkvCNQRKGA@mail.gmail.com https://git.postgresql.org/pg/commitdiff/64da07c41a8c0a680460cdafc79093736332b6cf
移除 InitXLOGAccess()。RecoveryInProgress() 呼叫 InitXLOGAccess() 並不好,因為狀態查詢函式通常不應具有執行初始化的副作用。我們可以透過從其他地方呼叫 InitXLOGAccess() 來修正此問題,但讓我們改為完全移除它。InitXLogAccess() 所做的一件事是初始化 wal_segment_size,但它不需要這樣做。在 postmaster 中,PostmasterMain() 呼叫 LocalProcessControlFile(),所有子進程都將繼承該值 -- 除了在 EXEC_BACKEND bulds 中,但每個後端都會執行 SubPostmasterMain(),它也會呼叫 LocalProcessControlFile()。InitXLOGAccess() 所做的另一件事是更新 RedoRecPtr 和 doPageWrites,但這並不重要,因為所有使用它們的程式碼都會在發現它們已變更時重試。唯一的區別是大多數程式碼現在將看到一個絕對無效的初始值,而不是一個可能已經過時的初始值,但這只會在每個後端生命週期中發生一次,因此不應該是一個大問題。由我修補,並由 Nathan Bossart、Michael Paquier、Andres Freund、Heikki Linnakangas 和 Álvaro Herrera 審閱。Discussion: http://postgr.es/m/CA+TgmoY7b65qRjzHN_tWUk8B4sJqk1vj1d31uepVzmgPnZKeLg@mail.gmail.com https://git.postgresql.org/pg/commitdiff/fa0e03c15a9f67671f0a6e0ec66d5e2ac7119c8a
Fujii Masao 推送
postgres_fdw:修正意外回報空訊息的問題。postgres_fdw 中的 pgfdw_report_error() 函式會從 PGresult 或 PGconn 取得訊息,以回報從遠端伺服器收到的錯誤。先前,如果它無法從兩者取得訊息,則會意外地回報空訊息。此問題的原因是 pgfdw_report_error() 沒有正確處理無法取得訊息且其區域變數 message_primary 設定為 '\0' 的情況。此提交改進了 pgfdw_report_error(),以便在沒有收到訊息且 message_primary 設定為 '\0' 時,回報訊息「could not obtain ...」。這與 message_primary 為 NULL 時的行為相同。dblink 中的 dblink_res_error() 函式也有相同的問題,因此此提交也以相同方式對其進行改進。向所有受支援的分支進行回溯修補。作者:Fujii Masao,審閱者:Bharath Rupireddy。討論:https://postgr.es/m/477c16c8-7ea4-20fc-38d5-ed3a77ed616c@oss.nttdata.com https://git.postgresql.org/pg/commitdiff/557c39bba925d553c6bb12b5e80d1964d355583b
postgres_fdw:在取得查詢結果時,如果逾時,則回報警告。當中止遠端交易或向遠端伺服器發送取消請求時,postgres_fdw 會呼叫 pgfdw_get_cleanup_result() 以等待交易中止查詢或取消請求的結果到達。如果逾時或發生連線問題,則無法取得結果。先前,即使在 pgfdw_get_cleanup_result() 中逾時或發生連線問題,postgres_fdw 也不會回報任何警告訊息。這可能會使在發生此類事件時的疑難排解更加困難。此提交使 pgfdw_get_cleanup_result() 在失敗時告知其呼叫者發生了什麼問題(逾時或連線錯誤),並使其呼叫者根據該資訊回報適當的警告訊息。作者:Fujii Masao,審閱者:Bharath Rupireddy。討論:https://postgr.es/m/15aa988c-722e-ad3e-c936-4420c5b2bfea@oss.nttdata.com https://git.postgresql.org/pg/commitdiff/815d61fcd485e8c60dba22988bf5a90fc12df32d
doc:新增關於 postgres_fdw.application_name 的注意事項。postgres_fdw.application_name 可以是任何長度的任何字串,甚至包含非 ASCII 字元。但是,當它傳遞到外來伺服器並用作 application_name 時,它會被截斷為小於 NAMEDATALEN 個字元,並且其中的任何非可列印 ASCII 字元都將被替換為問號。此提交將這些注意事項新增到文件中。作者:Hayato Kuroda,審閱者:Kyotaro Horiguchi、Fujii Masao。討論:https://postgr.es/m/TYCPR01MB5870D1E8B949DAF6D3B84E02F5F29@TYCPR01MB5870.jpnprd01.prod.outlook.com https://git.postgresql.org/pg/commitdiff/58e2e6eb67fec14c793c74207407e172d7e0291d
Andrew Dunstan 推送了
修正 ssl 測試中的 perl 警告。如果 perl 的 hex() 函式的引數包含尾隨空白(或實際上除了十六進位數字以外的任何內容),則會發出警告,因此請移除有問題的文字。https://git.postgresql.org/pg/commitdiff/d4596a20d046e800644d6027613c6a2cb5a6c35e
啟用 MSVC 建置的 TAP 測試中使用的設定。來自配置或 Makefile 基礎架構的某些設定被 TAP 測試使用,但未被 vcregress.pl 設定。這修正了這些遺漏。這應該會增加測試覆蓋率,尤其是在建置伺服器上。審閱者:Noah Misch。討論:https://postgr.es/m/17093da5-e40d-8335-d53a-2bd803fc38b0@dunslane.net 回溯修補到所有活躍分支。https://git.postgresql.org/pg/commitdiff/edc2332550b2343bc9378540e11c8aa71f513a63
在使用 tar 之前,先檢查我們是否有可用的 tar。commit edc2332550 和建置伺服器暴露的問題。回溯修補到此用法開始的版本 14。https://git.postgresql.org/pg/commitdiff/f920f7e799c587228227ec94356c760e3f3d5f2b
還原「在使用 tar 之前,先檢查我們是否有可用的 tar」。這會還原 commit f920f7e799c587228227ec94356c760e3f3d5f2b。實際上,此修補程式修正了我們沒有的問題,反而導致了另一個問題。像原始碼一樣回溯修補到版本 14。討論:https://postgr.es/m/3655283.1638977975@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/745b99c6444f00befae77dc69c7a63529d751daf
Thomas Munro 推送了
檢查 Windows 上的 STATUS_DELETE_PENDING。1. 更新我們的 open() 封裝函式以檢查 NT 的 STATUS_DELETE_PENDING 並將其轉換為類似 Unix 的錯誤。這是通過 RtlGetLastNtStatus() 完成的,該函式是從 ntdll 動態載入的。如果我們決定在將來新增更多 NT 函式,則新的 win32ntdll.c 檔案會集中查詢 NT 函式。2. 移除嘗試對 stat() 執行類似操作的無效程式碼,並僅重複使用 open() 封裝函式程式碼。作為副作用,stat() 也提高了對「共用衝突」錯誤的抵抗力。3. 由於 stat() 在程序啟動的早期被使用,因此請移除在到達 pgwin32_open_handle() 之前 Win32 信號事件已被建立的要求。相反,教導 pg_usleep() 在信號事件可用之前,退回到不可中斷的睡眠狀態。這可以回溯修補,但目前僅在主分支中。此問題顯然已經存在很長時間,並且僅產生了一些抱怨。建議的修補程式更頻繁地觸發它,從而導致此調查和修復。審閱者:Andres Freund andres@anarazel.de,審閱者:Alexander Lakhin exclusion@gmail.com,審閱者:Juan José Santamaría Flecha juanjo.santamaria@gmail.com。討論:https://postgr.es/m/CA%2BhUKGJz_pZTF9mckn6XgSv69%2BjGwdgLkxZ6b3NWGLBCVjqUZA%40mail.gmail.com https://git.postgresql.org/pg/commitdiff/e2f0f8ed251d02c1eda79e1ca3cb3db2681e7a86
變更 ProcSendSignal() 以使用 pgprocno。不要通過 pid 來引用目標後端,而是使用 pgprocno。這意味著我們不必掃描 ProcArray,並且可以刪除一些用於處理啟動過程的特殊情況程式碼。討論:https://postgr.es/m/CA%2BhUKGLYRyDaneEwz5Uya_OgFLMx5BgJfkQSD%3Dq9HmwsfRRb-w%40mail.gmail.com 審閱者:Soumyadeep Chakraborty soumyadeep2007@gmail.com,審閱者:Ashwin Agrawal ashwinstar@gmail.com,審閱者:Andres Freund andres@anarazel.de https://git.postgresql.org/pg/commitdiff/a13db0e16404ae532fe037071c7fe2576a1f8890
Alexander Korotkov 推送了
Andres Freund 推送了
使 PG_TEST_USE_UNIX_SOCKETS 在 windows 上的 tap 測試中工作。當將 socket 目錄放入 postgresql.conf 或 libpq 連接字串中時,我們需要將 windows 樣式的 \ 路徑分隔符替換為 /,否則它們會被解釋為逸出字元。作者:Andres Freund andres@anarazel.de。審閱者:Peter Eisentraut peter.eisentraut@enterprisedb.com。討論:https://postgr.es/m/4da250a5-4222-1522-f14d-8a72bcf7e38e@enterprisedb.com https://git.postgresql.org/pg/commitdiff/45f52709d86ceaaf282a440f6311c51fc526340b
isolationtester:將會話名稱附加到 application_name。當編寫/偵錯隔離測試時,有時查看哪個會話持有什麼鎖等是很有用的。為了使它更容易,無論是作為 spec 檔案的一部分還是交互式地,都將會話名稱附加到 application_name。由於 b1907d688 application_name 已經包含測試名稱,因此這將會話的名稱附加到該名稱。insert-conflict-specconflict 手動執行了類似的操作,現在可以將其刪除。正如我們最近對其他測試基礎架構所做的那樣,回溯修補此變更,以使回溯修補測試更容易。作者:Andres Freund andres@anarazel.de。審閱者:Michael Paquier michael@paquier.xyz,審閱者:Andrew Dunstan andrew@dunslane.net。討論:https://postgr.es/m/20211211012052.2blmzcmxnxqawd2z@alap3.anarazel.de 回溯修補:10-,以使回溯修補測試更容易。https://git.postgresql.org/pg/commitdiff/3f323956128ff8589ce4d3a14e8b950837831803