pgCluu 3.2,一個用於審計 PostgreSQL 性能的 Perl 程式,已發布。
PGroonga 2.3.2,一個適用於所有語言的全文檢索平台,已發布。
https://archives.postgresql.org/pgsql-jobs/2021-10/
Planet PostgreSQL: https://planet.postgresql.org/
PostgreSQL 每週新聞由 David Fetter 本週為您帶來
請在太平洋標準時間下午 3:00 前的星期日將新聞和公告提交至 david@fetter.org。
Michaël Paquier 推送了
修正在熱備節點使用 2PC 升級期間的快照建置問題。當涉及 2PC 交易時,在復原結束時會執行一些特定的邏輯:1) 呼叫 RecoverPreparedTransactions(),將 2PC 交易的狀態復原到記憶體中(重新取得鎖定等)。2) ShutdownRecoveryTransactionEnvironment(),返回到正常操作,主要清除復原鎖定和 KnownAssignedXids(包括先前追蹤的任何 2PC 交易)。3) 將 XLogCtl->SharedRecoveryState 切換到 RECOVERY_STATE_DONE,這是任何呼叫 RecoveryInProgress() 的程序檢查叢集是否仍在復原中的關鍵點。在步驟 2) 和 3) 之間拍攝的任何快照都會是空的,導致任何依賴於此時快照的交易可能會損壞資料,因為可能仍然有一些 2PC 交易需要追蹤,並且 RecentXmin 在同一個交易中連續呼叫 GetSnapshotData() 時會向後移動。由於 SharedRecoveryState 是考慮是否可以安全捨棄 KnownAssignedXids 的點,因此此提交將步驟 2) 移至步驟 3) 之後,因此我們永遠不會以空的快照結束。這自從熱備引入以來就存在,因此全部向後移植。錯誤快照的視窗非常小,但在運行 023_pitr_prepared_xact.pl 時我看到了它,buildfarm 成員 fairywren 也是如此。Thomas Munro 也獨立發現了它。特別感謝 Andres Freund 花時間分析這個問題。報告者:Thomas Munro,Michael Paquier 分析者:Andres Freund 討論:https://postgr.es/m/20210422203603.fdnh3fu2mmfp2iov@alap3.anarazel.de 向後移植:9.6 https://git.postgresql.org/pg/commitdiff/8a4237908c0fe73dd41d4d7c7a6314f17dfd7a6f
修復 pg_verifybackup TAP 測試中的警告。a3fcbcd 中的疏忽。報告者:Thomas Munro 討論:https://postgr.es/m/CA+hUKGKnajZEwe91OTjro9kQLCMGGFHh2vvFn8tgHgbyn4bF9w@mail.gmail.com 向後移植:13 https://git.postgresql.org/pg/commitdiff/ec2133a447318ac6d78887e91940d69e6d92a435
重構日誌收集器中每個目標檔案的輪換。stderr 和 csvlog 在檔案大小、年齡或由使用者請求(pg_ctl logrotate 或 SQL 函數 pg_rotate_logfile)強制輪換其檔案時,一直使用重複的程式碼。兩者之間的主要區別在於 stderr 需要始終開啟其檔案,以便在啟用替代目標時,如果日誌收集器尚未準備好執行其工作,則可以進行重新導向。此外,如果 csvlog 被停用,我們需要正確關閉儲存在日誌收集器中的元資料(current_logfiles 的最後一個檔案名和當前為業務開啟的 fd)。除了這些點之外,該程式碼在錯誤處理方面以及檔案是否應該建立或僅繼續方面是相同的。此變更使程式碼整體上更簡單,並且將有助於引入更多基於檔案的日誌目標。此重構類似於 5b0b699 中所做的工作。大多數重複來自 fd801f4。pg_ctl 的一些 TAP 測試檢查了強制日誌輪換的情況,但這在某種程度上是有限的,因為沒有涵蓋 log_rotation_age 或 log_rotation_size(這些可能不值得額外資源來運行),也沒有涵蓋重新載入具有不同 stderr 和 csvlog 組合的 log_destination。我已經分別測試了所有這些案例以進行此重構。作者:Michael Paquier 討論:https://postgr.es/m/CAH7T-aqswBM6JWe4pDehi1uOiufqe06DJWaU5=X7dDLyqUExHg@mail.gmail.com https://git.postgresql.org/pg/commitdiff/5c6e33f071537d9831db57471a06d39a175b535a
修復 syslogger.c 中的編譯警告。5c6e33f 中的疏忽。作者:Nathan Bossart 討論:https://postgr.es/m/DD8AD4CE-63B7-44BE-A3D2-14A4E4B19C26@amazon.com https://git.postgresql.org/pg/commitdiff/05c4248ad1bf0c2721ce9445f6908da9ece36ff8
重構 csvlog 回退到 stderr 以更好地處理 WIN32 服務案例。在某些情況下,例如 syslogger 尚未可用時,send_message_to_server_log() 會強制將日誌條目重新導向到 stderr 以用於 csvlog。如果發生這種情況,csvlog 將回退到 stderr 以記錄一些資訊,而不是什麼都不記錄。程式碼的組織方式是 stderr 在 csvlog 之前完成,csvlog 檢查 stderr 尚未以反轉條件發生。透過這種程式碼組織方式,如果在 WIN32 上將 Postgres 作為服務運行,則可能會遺失一些訊息,因為沒有可用的 stderr,並且由於該原因,用於儲存 stderr 訊息的 StringInfoData 的處理相當令人困惑。此提交將 csvlog 處理移到 stderr 之前,因為我們能夠追蹤是否需要將某些內容記錄到 stderr。這減少了 stderr 的處理,使其位於單一程式碼路徑中,並為 WIN32 服務新增了回退到事件日誌的功能。這也簡化了我們處理 stderr 的 StringInfoData 的方式,使整合新的基於檔案的日誌目標變得更加容易。在檢查此變更時,我得以使用 Windows 上的服務和事件日誌。審閱人:Chris Bandy 討論:https://postgr.es/m/YV0vwBovEKf1WXkl@paquier.xyz https://git.postgresql.org/pg/commitdiff/8b76f89c37973082b3d64f5a27937efcca9d65f6
Daniel Gustafsson 推送了
將 InvalidXid 的使用替換為 InvalidTransactionId。雖然 Xid 是 TransactionId 的常見縮寫,但 InvalidXid 並未在程式碼中定義。修正錯誤使用較短版本的註解。作者:Bharath Rupireddy bharath.rupireddyforpostgres@gmail.com 討論:https://postgr.es/m/CALj2ACUQzdigML868nV4cojfELPkEzNLNOk7b91Pho4JB90fng@mail.gmail.com https://git.postgresql.org/pg/commitdiff/941921b875c7710e2b070c02c7819f2510808fdd
如果 TAP 測試未啟用,則提供錯誤提示。嘗試在未以 --enable-tap-tests 配置的樹中運行 TAP 測試的錯誤訊息相當簡潔,可以為加入 postgres 的新開發人員提供更多幫助。這增加了一個關於如何在這種情況下運行測試的小提示。作者:Kevin Burke kevin@burke.dev 討論:https://postgr.es/m/CAKcy5ejKVYwUXguQcd6i9KHDm7cM7FzjQ+aayaPveoa_woyQpQ@mail.gmail.com https://git.postgresql.org/pg/commitdiff/b5cb4db91327c2cef66207bde9cbcb592b91f93c
在構建 libpq 時,提供關於 exit() 檢查的錯誤提示。 Commit dc227eb82 引入了對 libpq 的限制,即不允許呼叫任何調用 exit() 的函數。這在 e45b0dfa1f 和 2f7bae2f92 以及 792259591 中得到了進一步的改進和修復。雖然這在 Makefile 中有詳細的記錄,但當檢查失敗時發出的錯誤訊息很簡潔,對於沒有先驗知識的新開發人員來說,沒有任何提示。這增加了一個錯誤提示,以幫助加入 postgres 的新開發人員。作者:Rachel Heaton rheaton@vmware.com 共同作者:Jacob Champion pchampion@vmware.com 討論:https://postgr.es/m/CADJcwiVL20955HCNzDqz9BEDr6A77pz6-nac5sbZVvhAEMijLg@mail.gmail.com https://git.postgresql.org/pg/commitdiff/e9bc0441f1446f6614fa6712841acec91890e089
修正註解中的重複單詞。移除程式碼註解中意外重複的單詞。作者:Dagfinn Ilmari Mannsåker ilmari@ilmari.org 討論:https://postgr.es/m/87bl45t0co.fsf@wibble.ilmari.org https://git.postgresql.org/pg/commitdiff/7111e332c57ddb562d0ce26a4e08761a0baafb65
修正 libpq 中捕捉 exit() 呼叫的檢查。 Commit e9bc0441f 為 libpq 的 exit() 檢查添加了一個錯誤提示,但不小心將 nm 命令列更改為使用 -a 而不是 -A。這些選項非常相似,以至於在測試中被隱藏了,但 -a 也會顯示除錯符號,這不是我們想要的。透過將檢查恢復為再次使用 -A 來修正此問題。回報人:Anton Voloshin a.voloshin@postgrespro.ru 討論:https://postgr.es/m/bd2c8409-d6b3-5de9-ba0f-40c1381f630f@postgrespro.ru https://git.postgresql.org/pg/commitdiff/de744e9efbc55288572d1e81168c74ea85a4b90a
Peter Eisentraut 推送
更新 Unicode 映射文字檔案。有一些較新的版本可用。沒有功能上的差異,但無論如何讓我們把它們放進來,這樣下次有人想在這個領域做一些實際工作時,就不會出現令人驚訝的差異了。https://git.postgresql.org/pg/commitdiff/ce27c8953e8e48c69c690c0e5795cde40ed59fd2
使 Unicode makefile 成為平行安全。修復規則,以便每個規則都是平行安全的,使用我們在樹中的其他地方使用的相同技巧,用於產生多個輸出檔案的規則。重構整個 makefile,以減少重複。討論:https://postgres.tw/message-id/18e34084-aab1-1b4c-edd1-c4f9fb04f714%40enterprisedb.com https://git.postgresql.org/pg/commitdiff/e752727195798c324e769cfebf9dc4baa1c6bb0c
修正迴圈變數的符號。 https://git.postgresql.org/pg/commitdiff/ba216d3b54ac334729c505ec8a725db3826290a2
改善檔案中的順序。將新 PublicationTable 節點的支援函數移動到檔案中更合理的位置。 https://git.postgresql.org/pg/commitdiff/d942887039a608c91084a942fe10571c6f6be35a
Tom Lane 推送
文件:修正 GiST 支援函數文件中的小問題。 gist.sgml 和 xindex.sgml 尚未針對新增 sortsupport 支援函數(commit 16fa9b2b3)進行完全更新。 xindex.sgml 也遺漏了 compress 和 decompress 支援函數是可選的,這顯然是一個更早的疏忽。順便說一句,修正措辭和大小寫中無謂的不一致之處。由 E. Rogov 指出。向後移植到 v14;之前的殘留問題不夠重要,不值得處理。討論:https://postgr.es/m/163335322905.12519.5711557029494638051@wrigleys.postgresql.org https://git.postgresql.org/pg/commitdiff/36d1a848a86afd2855215af2a112b9bde999354a
進一步更新我們對 Windows 時區名稱的映射。根據討論,讓我們忠實地遵循 CLDR 的預設時區映射。這裡有兩個明顯改進的變更: * 將「格林威治標準時間」映射到 Atlantic/Reykjavik 實際上比使用倫敦更適合,因為冰島自 1968 年以來沒有遵守 DST,因此這更接近人們可能期望的結果。 * 由於「薩摩亞」時區被指定為 UTC+13:00,我們必須將其映射到 Pacific/Apia 而不是 Pacific/Samoa;後者指的是現在位於日期線另一側的美屬薩摩亞。其餘的這些變更看起來像是選擇人口最多的 IANA 時區作為代表。無論細節如何,我們都只想說「如果你不喜歡這個映射,請向 CLDR 投訴」。討論:https://postgr.es/m/3266414.1633045628@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/c1aa3b3c0d2125cb04df8ed0387448d8aeb9519c
文件:改善 UNION/INTERSECT/EXCEPT 語法的描述。 queries.sgml 未提及 INTERSECT 比 UNION 或 EXCEPT 綁定更緊密這個相當重要的點。 我認為它還可以更多地討論括號在這些結構中的作用。 根據 Christopher Painter-Wakefield 的抱怨。 討論:https://postgr.es/m/163338891727.12510.3939775743980651160@wrigleys.postgresql.org https://git.postgresql.org/pg/commitdiff/f3fec23dbdead113700fb1b401b681fa24f1e4f4
文件:改善 timezone/README 中追蹤 Windows 時區的方法。 我們現在應該引用 CLDR 作為時區名稱映射的主要參考。 討論:https://postgr.es/m/3266414.1633045628@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/db692b0c84908b4ef5ea4c15fa2d742582ad2cf9
修正 postgres_fdw 的 conversion_error_callback 中的空指標崩潰問題。Commit c7b7311f6 調整了 conversion_error_callback,使其始終使用查詢的 rangetable 中的資訊,以避免在已經失敗的交易中進行目錄查詢。然而,由於 make_tuple_from_result_row 的文件極度不足,我沒有意識到 fsstate 在某些情況下可能為 NULL。這導致在這種情況下出現轉換錯誤時發生崩潰。透過在 fsstate 為 NULL 時回退到先前的編碼來修正此問題。也改進了註解。根據 Andrey Borodin 的報告。回溯修補至 9.6,與先前的修補程式相同。討論:https://postgr.es/m/08916396-55E4-4D68-AB3A-BD6066F9E5C0@yandex-team.ru https://git.postgresql.org/pg/commitdiff/3071bbfe44f36019710190a9273ad2bd4a947878
plperl:將 ppport.h 更新至 Perl 5.34.0。同時應用執行 perl ppport.h --compat-version=5.8.0 建議的變更。並移除一些不再需要的 NEED_foo 宣告。Dagfinn Ilmari Mannsåker 討論:https://postgr.es/m/87y278s6iq.fsf@wibble.ilmari.org https://git.postgresql.org/pg/commitdiff/05798c9f7f08908bdd06c82d934da67535b72005
調整 configure,堅持使用 Perl 版本 >= 5.8.3。先前它僅檢查版本 >= 5.8.0,儘管文件自 commit dea6ba939 以來已聲明最低版本為 5.8.3。根據導致該 commit 的討論,我 (tgl) 有意這樣做,因為當時您可以使用 5.8.0 進行一些基本的設定。但我們實際上沒有針對任何低於 5.8.3 的版本進行測試,所以誰知道這是否仍然是真的。無論如何,不太可能有人會關心,所以讓我們讓 configure 的版本檢查與文件相符。Dagfinn Ilmari Mannsåker 討論:https://postgr.es/m/87y278s6iq.fsf@wibble.ilmari.org 討論:https://postgr.es/m/16894.1501392088@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/92e6a98c3636948e7ece9a3260f9d89dd60da278
更新 test/perl/README,也堅持使用 Perl 版本 >= 5.8.3。先前 commit 中的疏忽,由 Daniel Gustafsson 指出。討論:https://postgr.es/m/87y278s6iq.fsf@wibble.ilmari.org https://git.postgresql.org/pg/commitdiff/93fb39eca643a33dd6e3c8818fc7899aa67a8103
文件:更新我們關於最低建議 AIX 版本的聲明。我們目前有 buildfarm 成員測試到 AIX 7.1,但在此之前沒有,並且較舊的 AIX 版本早已超出 IBM 的支援範圍。因此,聲明 7.1 是最舊的支援版本。討論:https://postgr.es/m/87y278s6iq.fsf@wibble.ilmari.org https://git.postgresql.org/pg/commitdiff/08e2daf06c71881415ebd19105a8fe53f6eb2f8f
文件:改進 ^@ 開頭運算子的文件。此運算子沒有在任何地方正式記錄。為了給它一個自然的歸宿,將 functions-string-other 表重新標記為「其他字串函數和運算子」,這在任何情況下都更與 functions-string-sql 表平行。在這裡,新增到模式比對和文字搜尋部分的交叉參考。人們很可能來到這個部分尋找這些(但我不希望實際上在這些表中列出它們)。討論:https://postgr.es/m/CADT4RqB13KQHOJqqQ+WXmYtJrukS2UiFdtfTvT-XA3qYLyB6Cw@mail.gmail.com https://git.postgresql.org/pg/commitdiff/2ae5d72f004f599c351ee31e8da5fb3e40303760
Andres Freund 推送
windows:定義 WIN32_LEAN_AND_MEAN 以加快編譯速度。windows.h 包含許多其他標頭,顯著降低編譯速度。WIN32_LEAN_AND_MEAN 可以稍微減少這種情況。最好從這樣一個中心位置移除 windows.h 的包含(以及對它的間接包含),但在那之前... 討論:https://postgr.es/m/20210921193035.pqzay43vpyv7in43@alap3.anarazel.de https://git.postgresql.org/pg/commitdiff/8162464a25e5314e753c580389f76a9b7f69445b
修正 windows 上帶有 offset 的 TestLib::slurp_file()。3c5b0685b921 使用 setFilePointer() 設定 filehandle 的位置,但傳遞了錯誤的 filehandle,總是將位置留在 0。與其僅修正該問題,不如移除 setFilePointer() 的使用,我們在此時有一個 perl fd,所以我們可以直接使用 perl 的 seek()。此外,perl filehandle 沒有被關閉,只有 windows filehandle 被關閉了。Reviewed-By: Andrew Dunstan andrew@dunslane.net Author: Andres Freund andres@anarazel.de 討論:https://postgr.es/m/20211003173038.64mmhgxctfqn7wl6@alap3.anarazel.de Backpatch: 9.6-,與 3c5b0685b921 相同 https://git.postgresql.org/pg/commitdiff/2f74db1236fe83e6665e5b0ddad4454c69495614
Bruce Momjian 推送
Fujii Masao 推送
psql:改進 LOCK TABLE 的 tab 補全功能。此 commit 使 psql 支援 LOCK TABLE 命令的 ONLY 和 NOWAIT 關鍵字的 tab 補全功能。Author: Koyu Tanigawa Reviewed-by: Shinya Kato, Fujii Masao 討論:https://postgr.es/m/a322684daa36319e6ebc60b541000a3a@oss.nttdata.com https://git.postgresql.org/pg/commitdiff/0b0d277c35533baecc8d1a9356f71de5f2ee0bd8
文件:記錄 pg_encoding_to_char() 和 pg_char_to_encoding()。先前這兩個函數都沒有在文檔中的任何地方描述。但由於它們自 7.0 以來就已存在,並且在諸如 pg_database 之類的系統目錄的描述中提到,因此為它們添加簡短的描述是合理的。Author: Ian Lawrence Barwick Reviewed-by: Laurenz Albe, Fujii Masao 討論:https://postgr.es/m/CAB8KJ=infievn4q1N4X7Vx8w4_RMPPG0pLvxhSDjy5WQOSHW9g@mail.gmail.com https://git.postgresql.org/pg/commitdiff/f6b5d05ba9a4ac7c5ebec76045c6e0afcf7c9eec
當找到無效的頁面標頭時,使恢復報告錯誤訊息。Commit 0668719801 變更了 XLogPageRead(),使其驗證頁面標頭,如果找到無效的頁面標頭,則重設錯誤訊息並重試讀取頁面,以修正在串流待機模式下卡在連續記錄中的情況。此變更隱藏了關於無效頁面標頭的錯誤訊息,這會讓使用者更難以調查在 WAL 中找到的實際問題是什麼。為了修正該問題,此 commit 使 XLogPageRead() 在找到無效的頁面標頭時報告錯誤訊息。當不在待機模式時,無效的頁面標頭應導致恢復結束,而不是重試讀取頁面,因此 XLogPageRead() 不需要為重試驗證頁面標頭。相反,ReadPageInternal() 應該負責在這種情況下進行驗證。因此,此 commit 變更了 XLogPageRead(),使其在不在待機模式時不會為重試驗證頁面標頭。Reported-by: Yugo Nagata Author: Yugo Nagata, Kyotaro Horiguchi Reviewed-by: Ranier Vilela, Fujii Masao 討論:https://postgr.es/m/20210718045505.32f463ed6c227111038d8ae4@sraoss.co.jp https://git.postgresql.org/pg/commitdiff/68601985e699adeb267636fd19d3d6113554bd1f
Amit Kapila 推送
Robert Haas 推送
BASE_BACKUP 的彈性選項。先前,BASE_BACKUP 使用完全硬編碼的語法,但這難以擴充。因此,採用與 VACUUM、ANALYZE、COPY 和 EXPLAIN 等 SQL 指令相同的語法,這些指令並非所有選項名稱都必須是剖析器關鍵字。在新語法中,大多數選項現在都採用可選的布林參數。為了與我們在其他地方的實踐一致,舊語法中稱為 NOWAIT 和 NOVERIFY_CHECKSUMS 的選項在新語法中分別稱為 WAIT 和 VERIFY_CHECKSUMS,預設值為 false。在新語法中,FAST 選項已被 CHECKSUM 選項取代,其值可以是 'fast' 或 'spread'。此提交並未移除對舊語法的支援。它只是新增了新語法作為附加選項,並使 pg_basebackup 在伺服器版本夠新以支援它時,優先使用新語法。由我提交修補程式,Fabien Coelho、Sergei Kornilov、Fujii Masao 和 Tushar Ahuja 審閱和測試。討論:http://postgr.es/m/CA+TgmobAczXDRO_Gr2euo_TxgzaH1JxbNxvFx=HYvBinefNH8Q@mail.gmail.com 討論:http://postgr.es/m/CA+TgmoZGwR=ZVWFeecncubEyPdwghnvfkkdBe9BLccLSiqdf9Q@mail.gmail.com https://git.postgresql.org/pg/commitdiff/0ba281cb4bf9f5f65529dfa4c8282abb734dd454
CREATE_REPLICATION_SLOT 的彈性選項。與 BASE_BACKUP 類似,CREATE_REPLICATION_SLOT 歷史上也使用了硬編碼的語法。為了提高未來的可擴展性,這裡也採用了彈性的選項語法。在新語法中,現在有一個單一的 SNAPSHOT 選項,它具有三個可能的值:'export'、'use' 和 'nothing',而不是三個互斥的選項 EXPORT_SNAPSHOT、USE_SNAPSHOT 和 NOEXPORT_SNAPSHOT。此提交並未移除對舊語法的支援。它只是新增了新語法作為附加選項,並使 pg_receivewal、pg_recvlogical 和 walreceiver 程序使用它。由我提交修補程式,Fabien Coelho、Sergei Kornilov 和 Fujii Masao 審閱。討論:http://postgr.es/m/CA+TgmobAczXDRO_Gr2euo_TxgzaH1JxbNxvFx=HYvBinefNH8Q@mail.gmail.com 討論:http://postgr.es/m/CA+TgmoZGwR=ZVWFeecncubEyPdwghnvfkkdBe9BLccLSiqdf9Q@mail.gmail.com https://git.postgresql.org/pg/commitdiff/0266e98c6b865246c3031bbf55cb15f330134e30
Dean Rasheed 推送
Etsuro Fujita 推送
在 joinrels.c 中加入遺漏的單字。作者:Amit Langote Backpatch-through: 13 討論:https://postgr.es/m/CA%2BHiwqGQNbtamQ_9DU3osR1XiWR4wxWFZurPmN6zgbdSZDeWmw%40mail.gmail.com https://git.postgresql.org/pg/commitdiff/700c73312841bd1a89263f238556ce8d8d916258
postgres_fdw:修正 connection.c 中的註解。Commit 27e1f1456 遺漏了更新一些註解。Reviewed-by: Bharath Rupireddy Backpatch-through: 14 討論:https://postgr.es/m/CAPmGK15Q2Nm6U%2Ba_GwskrWFEVBZ9_3VKOvRrprGufpx91M_3Sw%40mail.gmail.com https://git.postgresql.org/pg/commitdiff/972c7c6567fbb02a59b94ede80b17805de1bc03c