FOSDEM PGDay 2022 將於 2022 年 2 月 5-6 日線上舉行。https://fosdem.org/2022/
一本 PostgreSQL 遷移指南,其中包含許多寶貴的經驗,有法語和英語版本,已釋出。
pgDay Paris 2022 將於 2022 年 3 月 24 日在法國巴黎舉行。論文徵集截止日期為 2021 年 12 月 31 日午夜(巴黎時間)。
Citus Con,一個全球虛擬開發者大會,將於 2022 年 4 月 12-13 日舉行。論文徵集現已開放。
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/
2022 Nordic PGDay 將於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 對檢視、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() 的相容性問題。在 _WIN32_WINNT < 0x0600 的編譯環境中,無法使用 GetFinalPathNameByHandleA(),這意味著 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 對各種 DROP 命令的製表符補全。已完成以下改進:- 對 DROP OWNED、matviews 和 policies 的 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 描述中的一些不一致之處,同時使其措辭在所依賴的單位方面更加通用。對於大多數 GUC,這消除了使用“N 秒”或“N 位元組”之類的術語,這些術語可能不適用於所有翻譯這些字串的語言(根據我自己的經驗,這在法語和英語中有效,在日本語中效果較差)。根據下面列出的作者之間的討論。作者:Justin Pryzby、Michael Paquier 討論:https://postgr.es/m/20211129030833.GJ17618@telsasoft.com https://git.postgresql.org/pg/commitdiff/03774f9bb304d49fae3379806115aaa5d1fafea2
修復 CONCURRENTLY REINDEX 時的 toast 索引損壞。對 toast 索引或 toast 關係執行的 REINDEX CONCURRENTLY 可能會損壞重建的目標索引,因為並行執行的修改 toast 值的後端會在完成區域性操作後立即釋放對 toast 關係的鎖,而不是在修改 toast 值的事務提交後釋放。這裡的修復很簡單:現在,在儲存或刪除 toast 值時,我們會一直持有對 toast 關係的 ROW EXCLUSIVE 鎖,直到處理 toast 值的事務提交為止,這樣併發進行的 reindex 操作就可以等待任何活動並看到新插入(或刪除)的行。添加了一個隔離測試來檢查修復此問題的場景,該測試設計得有些巧妙,因為它依賴於 allow_system_table_mods 來重新命名 toast 表及其索引為固定的名稱。這樣,就可以直接對它們進行 reindex,而無需依賴底層關係的 OID。請注意,這也無法使用 DO 塊,因為 REINDEX CONCURRENTLY 不能在事務塊中執行。由於 c4a7a39,可以允許在測試套件中使用 allow_system_table_mods,因此該測試已向後移植到 13。報告者: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() 的呼叫者不再需要將其歸零,而是持有提供的選項以及預設/已解析選項值的點陣圖。這還簡化了在檢查不相容性時與命令支援的選項相關的一些檢查。同時,重新排序了為不支援的“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 記錄的描述。此提交改進了事務 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 的複製源時會觸發。添加了一些測試來更全面地覆蓋這種情況。提交 1eb6d65 中的疏忽。根據與 Amit Kapila 和 Masahiko Sawada 的討論。討論:https://postgr.es/m/YbbBfNSvMm5nIINV@paquier.xyz 向後移植到: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 是一個問題),這可能會導致測試失敗,而沒有退出路徑可以繞過任何失敗的測試。此提交的更改使得 LZ4、TAR 和 GZIP_PROGRAM 的預設值在載入 buildenv.pl 之前分配,而不是之後。這樣,我們就能與 GNU 構建保持相同的相容性,並使用相同的預設值,並且可以取消設定這些值中的任何一個。同時,在專門介紹 MSVC 的 TAP 測試的部分中,添加了關於這三個變數的一些文件。根據與 Andrew Dunstan 的討論。討論:https://postgr.es/m/YbGYe483803il3X7@paquier.xyz 向後移植到: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,在修改該區域時發現。https://git.postgresql.org/pg/commitdiff/22592e10b41a95f841642fa16127521989177bbc
Tom Lane 提交
將 random()、pg_erand48() 等替換為更好的 PRNG API 和演算法。標準化 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 匯出的變數宣告。這會撤銷 c2d1eea9e 和 11b500072 的提交,以及其他地方類似的 hack,轉而將 PGDLLIMPORT 宏設定為可以無條件使用。這是可行的,因為在前端程式碼中,我們不需要在定義檔案或消耗檔案中對這些庫匯出的變數進行任何標記;前端程式碼也無需訪問核心後端匯出的變數。同時,編寫一些關於這些宏的實際文件。作者:我,基於 Robert Haas 的建議 討論:https://postgr.es/m/1160385.1638165449@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/e04a8059a74c125a8af94acdcb7b15b92188470a
文件:改進關於 matviews 中 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
在檢查隨機數源時應對交叉編譯。提交 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 的詞法分析器歷來會從收集併發送給伺服器的內容中刪除破折號破折號(單行)註釋。這與它處理斜槓星號註釋的方式不一致,並且以前有人抱怨希望將此類註釋捕獲在伺服器日誌中。然而,完全撤銷此決定是過於大的行為更改。特別是,查詢開始前的行註釋通常不被認為是該查詢的一部分。我們可以改進這種情況的方法是捕獲明顯*在*查詢內的註釋,即在第一個非空格、非註釋標記之後但在查詢結束分號或反斜槓命令之前。這是一個幾乎微不足道的程式碼更改,並且隻影響少數迴歸測試結果。(嘗試將相同的規則應用於斜槓星號註釋是誘人的。但很難看到如何在不引起奇怪的歷史行為的情況下處理跨越多行的註釋,尤其是在使用者隨後在星號斜槓的同一行上開始新查詢時。鑑於缺乏抱怨,我們暫時擱置這種情況。)討論:https://postgr.es/m/CAJcOf-cAdMVr7azeYR7nWKsNp7qhORzc84rV6d7m7knG5Hrtsw@mail.gmail.com https://git.postgresql.org/pg/commitdiff/83884682f4df96184549b91869a1cf79dafb4f94
psql:將查詢之間的 "--" 註釋視為單獨的歷史條目。如果我們尚未為新查詢收集任何非空格、非註釋標記,請將當前輸入行重新整理到歷史記錄中,然後再讀取另一行。這使得 psql 的歷史行為與這樣一種觀察結果保持一致:僅包含註釋的行通常不被視為下一個查詢的一部分。psql 的提示行為也與其一致,因為它不會更改提示,直到您輸入了不是空格或 "--" 註釋的內容。Greg Nancarrow,由我簡化 討論:https://postgr.es/m/CAJcOf-cAdMVr7azeYR7nWKsNp7qhORzc84rV6d7m7knG5Hrtsw@mail.gmail.com https://git.postgresql.org/pg/commitdiff/c2f654930e9f8119b9ed12caab6192d0aafe5ebd
psql:預設情況下初始化註釋開始設定以獲得有用的值。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 值得修復,因為對於大多數非表物件型別,它不會獲取任何鎖。)向所有支援的分支向後移植。不幸的是,在向後移植的分支中,這隻能在有限程度上有所幫助,因為在提交 3aafc030a 之前,sinval 訊息佇列會在此類使用中膨脹很多,消耗的記憶體與實際洩漏的記憶體大致相當。儘管如此,這顯然是一個可以透過簡單修復來解決的洩漏,所以我們不妨修復它。Justin Pryzby,根據 Guillaume Lelarge 的報告 討論:https://postgr.es/m/CAECtzeW2DAoioEGBRjR=CzHP6TdL=yosGku8qZxfX9hhtrBB0Q@mail.gmail.com https://git.postgresql.org/pg/commitdiff/babe545caeba4c62feb3030940d93432721eea57
為 rl_variable_bind() 新增配置探測。一些非常舊的 readline 庫缺少此函式,導致提交 3d858af07 失敗。根據 buildfarm(透過 Michael Paquier)。討論:https://postgr.es/m/E1msTLm-0007Cm-Ri@gemulon.postgresql.org https://git.postgresql.org/pg/commitdiff/a7da41981021575e2359683d994eec6c9d246321
在後端關機時顯式關閉客戶端套接字(Windows)。事實證明,這對於防止 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 的次要資料收集查詢不應為我們不感興趣的物件執行的原始意圖。當 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 資料,並在客戶端合併計算。刪除用於 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 命令(包括其他會話的臨時表的 drop),則現有程式碼存在嚴重失敗風險。可以說這應該是一個向後移植的錯誤修復,但它具有中等侵入性,而且我們並未收到多少關於此類失敗的投訴。目前先將其放入 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 資料,因此在一些大表主要包含 TOAST 資料而其他表很少的情況下,我們可能會做出錯誤的排程決策。為了解決這個問題,我們還添加了 TOAST 表的 relpages 值。此補丁還修復了一個潛在的整數溢位問題,該問題可能導致在 off_t 僅為 32 位寬的機器上進行錯誤的排程。此類平臺可能已經絕跡,但我們仍然名義上支援它們,因此請進行修復。根據 Hans Buschmann 的投訴。討論:https://postgr.es/m/7d7eb6128f40401d81b3b7a898b6b4de@W2012-02.nidsa.loc https://git.postgresql.org/pg/commitdiff/65aaed22a849c0763f38f81338a1cad04ffc0e2c
在 Windows 上,關閉客戶端套接字時也呼叫 shutdown()。進一步的實驗表明,提交 6051857fc 在使用(某些版本的?)OpenSSL 時不夠。原因不明,但呼叫 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(字串)型別類別,儘管稱其為字串有點牽強,因為它只能儲存一個位元組。(在我們實際使用中,它更像列舉。)鑑於 parse_func.c 和 parse_coerce.c 對 TYPCATEGORY_STRING 的特殊啟發式方法,這種選擇現在似乎是錯誤的:讓 "char" 獲得那些優先的轉換行為不是一個好主意。更糟糕的是,最近發明了像 pg_node_tree 這樣的專用型別的補丁將 typcategory S 分配給了這些型別,這意味著它們也獲得了優先轉換待遇,而這種待遇是基於它們可以容納任意文字的假設。為了解決這個問題,我們建立了一個新的類別 TYPCATEGORY_INTERNAL 用於內部使用的型別,並將這些型別都分配給它。我使用了程式碼 'Z',因為它沒有更好的想法('I' 已經被佔用了)。此更改會破壞 psql/describe.c 中的一個查詢,該查詢現在需要將目錄 "char" 列顯式轉換為 text,然後才能將其與未修飾的字面量連線。此外,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
文件:取消文件化未實現的幾何運算子。在提交 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(在提交 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 中長期使用的邏輯:而不是物理交換兩個堆條目中的資料,而是將正在上移或下移的值儲存在區域性變數中,只需移動其他值即可。這使得程式碼更短,速度也更快。不清楚當前是否有呼叫者真的非常時間關鍵而能注意到,但我們最好在所有地方以相同的方式編寫堆維護程式碼。Ma Liangzhu 和 Tom Lane 討論:https://postgr.es/m/17336-fc4e522d26a750fd@postgresql.org https://git.postgresql.org/pg/commitdiff/a2ff18e89ff8f29677084bffd1e3de9ca6cd7224
刪除 pg_dump/pg_dumpall 對從 9.2 之前伺服器轉儲的支援。根據討論,我們將舊伺服器的支援限制在仍可在現代平臺上輕鬆構建的分支上,目前是 9.2 及以上版本。刪除了為從舊伺服器版本轉儲而設的一千多行程式碼。(與以前此類更改一樣,我們沒有刪除 pg_restore 讀取舊歸檔檔案的能力……儘管人們不禁要問現在如何測試它。)這清理了提交 989596152 留下的死程式碼。討論:https://postgr.es/m/2923349.1634942313@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/30e7c175b81d53c0f60f6ad12d1913a6d7d77008
刪除 pg_upgrade 對從 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 的呼叫者依賴於 typcache 行為細節,而他們可能不應該這樣做。因此,更改 API 規範,規定必須呼叫 ReleaseTupleDesc,並修復了未能這樣做的半打個呼叫者。據我所知,這只是為了未來的相容性,這裡沒有即時錯誤。因此,不向後移植。根據 Chapman Flack 的抱怨。討論:https://postgr.es/m/61B901A4.1050808@anastigmatix.net https://git.postgresql.org/pg/commitdiff/bbc227e951ecc59a29205be4952a623e7d1dd534
清理 pg_dump 和 pg_upgrade 中更多最近的死程式碼。我在 30e7c175b 和 e469f0aaf 中遺漏了一些東西,如 Justin Pryzby 所指出的。討論: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。修復由提交 5c056b0c2 更改的程式碼,使其始終為轉換為未指定 typmod 的 RelabelType,而不是其他內容。否則規劃器最佳化可能不會發生。我們似乎忽略了這一點,因為之前的實驗是在 numeric 型別上進行的:解析器不當地呼叫了 numeric() 長度強制函式,但 numeric_support() 將其最佳化為 RelabelType,因此一切看起來都正常。對於沒有最佳化長度強制函式的型別(如 bpchar),它的行為不正確。根據 John Naylor 的報告。向所有支援的分支向後移植,就像之前的補丁一樣。不幸的是,這不再包括 9.6……我們真的不應該將此類更改放入一個即將結束生命週期的分支。討論:https://postgr.es/m/CAFBsxsEfbFHEkouc+FSj+3K1sHipLPbEC67L0SAe-9-da8QtYg@mail.gmail.com https://git.postgresql.org/pg/commitdiff/9c356f4b2dd8f8ff49757287e387ab1d023e4449
在單獨的測試指令碼中修復 public schema 的許可權。在提交 b073c3ccd 之後,需要為 PUBLIC 授予 public schema 的 create 許可權才能使許多核心迴歸測試指令碼透過。該提交透過將 GRANT 新增到首先執行的表空間測試中來快速有效地完成。然而,這對單機複製測試來說是個問題。在這種設定下執行迴歸測試的最簡單方法是跳過表空間測試,而這不再可行。為了解決這個問題,我們發明了一個單獨的“test_setup”指令碼,並首先執行它,並在其中放置 GRANT。撤銷 b073c3ccd 對 tablespace.source 檔案的更改。將來,我們可能會嘗試透過讓 test_setup 建立廣泛使用的物件來減少各個測試指令碼之間的耦合,目標是大多數指令碼在僅執行 test_setup 後就可以執行。這需要一些工作,所以此提交僅解決了我的即時痛點。討論: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。提交 8523492d 簡化了“dead”的含義,以便 VACUUM:記憶體中收集的 TIDs(為索引 vacuuming 做準備)必須始終來自堆頁上的 LP_DEAD 存根行指標,這些指標是在修剪後找到的。這正式化了索引 vacuuming(和堆 vacuuming)是可選過程的想法。與修剪不同,它們可以無限期延遲,而不會有違反基本不變數的風險。例如,留下 LP_DEAD 項顯然不會增加事務 ID 迴繞的風險。沒有事務 ID 就無法實現事務 ID 迴繞。重新命名任何引用 DEAD 元組(帶有儲存的元組)的內容都加強了這一點。vacuumlazy.c 之外的程式碼繼續模糊了死元組/已刪除元組和 LP_DEAD 項之間的區別。這是必需的,因為自動 vacuum 排程仍然主要由“死專案/元組”統計資訊驅動。將來,我們可能會發現用更復雜的模型替換此模型很有用,作為教會自動 vacuum 執行更頻繁的 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”引用。提交 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”一詞來標準化。這完成了提交 276db875 中開始的工作。沒有理由有兩個術語。但只有一個術語是有充分理由的:避免混淆 VACUUM 在索引 AM 中呼叫 ambulkdelete 時為何會獲取完整的 cleanup lock(而不僅僅是普通的 exclusive lock)。這與保護物理索引資料結構本身無關。它對於實現一種鎖定協議是必需的,該協議確保指向堆/表結構的 TID 在 VACUUM 之前不會被標記為可回收(這與 VACUUM 在其第一個堆傳遞期間如何使用 cleanup lock 有些相似)。請注意,索引 AM 不一定需要實現此鎖定協議——一些索引 AM 使用 MVCC 快照作為其唯一的內部鎖定,以防止不安全的 TID 回收。順便,更新 nbtree README。將上述索引 vacuuming 鎖定協議的討論與提交 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 提交
新增一個檢視以顯示訂閱工作人員的統計資訊。此提交添加了一個新的系統檢視 pg_stat_subscription_workers,該檢視顯示有關在應用邏輯複製更改以及執行初始表同步期間發生的任何錯誤的資訊。當相應的訂閱被刪除時,訂閱統計資訊條目也會被刪除。它還添加了一個 SQL 函式 pg_stat_reset_subscription_worker() 來重置單個訂閱錯誤。此檢視的內容可供即將到來的補丁使用,該補丁將跳過與訂戶上的現有資料衝突的特定事務。此檢視將來可以擴充套件以跟蹤其他事務相關統計資訊,例如訂閱工作人員已提交/中止的事務數。作者: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
文件:在邏輯複製期間新增“附加分割槽”限制。將一個表附加到使用 publish_via_partition_root 設定為 true 的出版物釋出的分割槽樹中,不會導致該表已有的內容被複制。發生這種情況是因為訂閱伺服器不認為複製新附加的分割槽,因為根表已處於“就緒”狀態。此行為在 PG13 (83fd4532a7) 中引入,當時我們允許透過祖先發布分割槽更改。我們可以在未來考慮修復此限制。作者:Amit Langote 評審者:Hou Zhijie、Amit Kapila 向後移植到:13 討論:https://postgr.es/m/OS0PR01MB5716E97F00732B52DC2BBC2594989@OS0PR01MB5716.jpnprd01.prod.outlook.com https://git.postgresql.org/pg/commitdiff/eb7828f54a44843a64a23d0891d7eb6018c0749e
修復由提交 8d74fc96db 引起的迴歸測試失敗。測試未考慮到除應用更改之外的其他錯誤,例如“複製源 OID %d 已啟用...”可能會在表同步工作程式開始複製更改之前發生。為了使測試更穩健,我們現在需要檢查預期的錯誤和錯誤源,它將是 tablesync 或 apply 工作程式。順便刪除 Create Subscription 命令中無害的“streaming = off”選項,因為該選項預設為關閉。根據 buildfarm 成員 sidewinder。作者: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 以訪問它們。這種邏輯太複雜,只節省了每個索引幾個位元的收益。在此提交中,我們為 LVParallelIndStats 陣列分配了一個專用 shmem 區域,該陣列包括並行安全性標誌、索引 vacuum 狀態和 IndexBulkdeleteResult。每個索引都有一個數組元素,即使是那些並行索引 vacuuming 不安全或不值得的索引。此提交透過刪除所有點陣圖相關程式碼來使程式碼更清晰。此外,在並行索引 vacuum 之後新增對每個索引 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 測試。這為 SSL 測試套件添加了 sslinfo 擴充套件的基本覆蓋。透過與 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 測試期間為金鑰使用特定於測試的臨時路徑。SSL 和 SCRAM TAP 測試套件都使用 supplied test keys 的臨時副本,以確保正確的許可權。然而,這些檔案被複制到樹內,使用臨時檔名而不是真正的臨時資料夾。透過使用 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
刪除 general use 中變數的 PF_USED_FOR_ASSERTS_ONLY。fsstate(在 postgres_fdw.c 的 process_pending_requests 中)在 8998e3cafa2 中被新增為僅用於斷言的變數,1ec7fca8592 宣告在斷言之外使用該變數。rd_index(在 lsyscache.c 的 get_index_column_opclass 中)在 2a6368343ff 中引入,然後立即在修復提交 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
擴充套件私鑰統計檢查的錯誤處理。如果私鑰的統計操作失敗,程式碼會假設是由於 ENOENT,但這可能不一定。透過列印不同的錯誤訊息來擴充套件檢查(針對非 ENOENT 錯誤),以方便除錯。根據 Tom Lane 的建議,由於 buildfarm 中的 fairywren 動物出現問題。討論:https://postgr.es/m/1632478.1638305700@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/538724fc36e05339ea3734f1b886a67398fce71a
從註釋中刪除關於 TimeLineID 更新的提及。提交 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。提交 c113d8ad50 將證書的複製移至測試期間的臨時路徑,而不是使用源樹。這破壞了 msys 上的測試,因為絕對路徑沒有為 msys 平臺進行調整。確保在複製和傳遞連線字串之前使用 perl2host 轉換路徑。同時,使所有測試套件的證書複製錯誤處理保持一致。討論:https://postgr.es/m/YacT3tm97xziSUFw@paquier.xyz https://git.postgresql.org/pg/commitdiff/c3b34a0ff4a00d00d6ea364c85201e155ca7ef6b
修復 Windows 上的連線字串路徑分隔符。提交 c113d8ad5 生成的臨時路徑不能直接作為連線字串傳遞給 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 都用於客戶端證書吊銷,而不是伺服器證書。儘管引數描述可能會被誤解為相反的意思,正如導致此修復的 bug 報告所證明的那樣。同樣,展開 sslcrl 和 sslcrldir 以明確提及伺服器證書。同時提到 sslcrldir,而以前只討論了 sslcrl。向後移植到 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 向後移植到:10 https://git.postgresql.org/pg/commitdiff/fadac33bb8de1cb9005aed07cdd059ba1fa9c6f8
Álvaro Herrera 提交
Tomáš Vondra 提交了
在檢查 HOT 更新時忽略 BRIN 索引。在確定是否可以透過使用 BRIN 索引來跳過索引更新時,我們可以忽略僅由 BRIN 索引索引的屬性。BRIN 中沒有指向單個元組的索引指標,並且頁面範圍摘要仍然會更新,因為它依賴於可見性資訊。這還刪除了 rd_indexattr 列表,並用 rd_attrsvalid 標誌替換它。該列表在任何地方都沒有使用,一個簡單的標誌就足夠了。由 Josef Simanek 提交補丁,我進行了各種修復和改進。作者:Josef Simanek 評審者:Tomas Vondra、Alvaro Herrera 討論:https://postgr.es/m/CAFp7QwpMRGcDAQumN7onN9HjrJ3u4X3ZRXdGFT0K5G2JWvnbWg%40mail.gmail.com https://git.postgresql.org/pg/commitdiff/5753d4ee320b3f6fb2ff734667a1ce1d9d8615a1
在 btree_gist 文件中新增 bool。提交 57e3c516 為 btree_gist 添加了 bool 運算子類,但更新文件中的資料型別列表以反映此更改。報告者: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() 中進行了檢查,而 relkinds 可以有父項,並且這些條目在之後 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(),並將引數宣告為有符號整數。審閱者:Nathan Bossart bossartn@amazon.com 討論: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) 中不再提供十六進位制格式之前。現在我們可以刪除額外的顯式編碼/解碼呼叫,並依賴預設輸出格式。討論:https://postgres.tw/message-id/flat/17dcb4f7-7ac1-e2b6-d5f7-2dfba06cd9ee%40enterprisedb.com https://git.postgresql.org/pg/commitdiff/814e1d9ff7a853b16a544a244bfa92e8388be248
pgrowlocks:修復不正確的格式佔位符。事務 ID 應列印為無符號整數,類似於 xidout()。https://git.postgresql.org/pg/commitdiff/254c63e9eda0b006fb61b9dc23970a6381efd061
允許為外部索引鍵 ON DELETE SET 操作指定列列表。透過允許指定列列表來擴充套件外部索引鍵 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,而不是外部索引鍵約束中的所有列。這對於多租戶或分片模式很有用,其中租戶 ID 或分片 ID 包含在所有表的примарном ключе中,但不應設定為 null。作者:Paul Martinez paulmtz@google.com 討論: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。討論:https://postgres.tw/message-id/flat/a3df47c9-b1b4-29f2-7e91-427baf8b75a3%40enterprisedb.com https://git.postgresql.org/pg/commitdiff/3c6f8c011f85df7b35c32f4ccaac5c86c9064a4a
Robert Haas 提交
記錄 tar 存檔現在已正確終止。提交 5a1007a5088cd6ddf892f7422ea8dbaef362372f 改變了伺服器行為,但我沒有注意到現有行為已被記錄,因此沒有更新文件。此提交完成了此操作。我選擇提到行為已更改,而不是僅僅刪除對偏離標準的引用。我認為這可能對工具作者有所幫助。討論: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 和我審閱。許多其他人評論了該主題,但據我所見,那是對更改的優點進行的討論,而不是對補丁的審閱。討論: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 構建之外,但那時每個後端都會執行 SubPostmasterMain(),它也呼叫 LocalProcessControlFile()。InitXLogAccess() 所做的另一件事是更新 RedoRecPtr 並執行 pageWrites,但這並不關鍵,因為所有使用它們的程式碼如果發現它們已更改,將只是重試。唯一的區別是,大多數程式碼現在將看到一個絕對無效的初始值,而不是一個可能剛剛過時的值,但這每個後端生命週期只會發生一次,所以不應該是一個大問題。由我提交補丁,由 Nathan Bossart、Michael Paquier、Andres Freund、Heikki Linnakangas 和 Álvaro Herrera 審閱。討論: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 獲取一條訊息,以報告從遠端伺服器收到的錯誤。以前,如果它既不能從 PGresult 也不能從 PGconn 獲取訊息,它就會意外地報告空訊息。此問題的原因是 pgfdw_report_error() 未正確處理無法獲取任何訊息的情況,並且其本地變數 message_primary 被設定為 '\0'。此提交改進了 pgfdw_report_error(),以便在它未獲取到任何訊息且 message_primary 設定為 '\0' 時報告“無法獲取...”的訊息。這與 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 設定。這可以糾正這些遺漏。這應該會增加測試覆蓋率,尤其是在 buildfarm 上。審閱者:Noah Misch 討論:https://postgr.es/m/17093da5-e40d-8335-d53a-2bd803fc38b0@dunslane.net 回填到所有活動分支。https://git.postgresql.org/pg/commitdiff/edc2332550b2343bc9378540e11c8aa71f513a63
在嘗試使用 tar 之前檢查 tar 是否可用。提交 edc2332550 和 buildfarm 暴露的問題。回填到此用法開始的 14 版本。https://git.postgresql.org/pg/commitdiff/f920f7e799c587228227ec94356c760e3f3d5f2b
Revert "在嘗試使用 tar 之前檢查 tar 是否可用"。此更改撤銷了提交 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。一個新的檔案 win32ntdll.c 集中了 NT 函式的查詢,以防我們將來新增更多函式。2. 刪除無效程式碼,該程式碼曾試圖對 stat() 做類似的事情,而是複用了 open() 包裝器程式碼。作為副作用,stat() 也獲得了對抗“共享衝突”錯誤的彈性。3. 由於 stat() 在程序啟動時非常早地被使用,因此刪除了在達到 pgwin32_open_handle() 之前必須建立 Win32 訊號事件的要求。相反,讓 pg_usleep() 在訊號事件可用之前回退到不可中斷的睡眠。這可以回填,但目前僅在 master 中。問題似乎困擾我們很長時間,只引起了少數抱怨。提議的補丁更頻繁地觸發它,這導致了這次調查和修復。審閱者: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,並且可以刪除一些處理 startup 程序的特殊情況程式碼。討論: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 測試生效。我們需要將類 Windows 的 \ 路徑分隔符替換為 /,在將其放入 postgresql.conf 或 libpq 連線字串時,否則它們將被解釋為跳脫字元。作者: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