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 提供。
請在太平洋標準時間(PST8PDT)週日晚上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) 之間拍攝的任何快照都將是空的,這可能導致依賴於此時快照的任何事務損壞資料,因為在同一次事務中連續呼叫 GetSnapshotData() 時,RecentXmin 可能會向後移動。由於 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 的最後一個檔名以及正在使用的檔案描述符)。除了這些點之外,在錯誤處理以及是否應建立檔案或繼續使用現有檔案方面,程式碼是相同的。此更改總體上使程式碼更簡單,並將有助於引入更多基於檔案的日誌目標。此重構與 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 服務情況。send_message_to_server_log() 在某些情況下會強制將 csvlog 的日誌條目重定向到 stderr,例如 syslogger 尚未準備好。如果發生這種情況,csvlog 將回退到 stderr 來記錄一些資訊,而不是什麼都不記錄。程式碼的組織方式是先處理 stderr,然後處理 csvlog,csvlog 透過反向條件檢查 stderr 是否尚未發生。使用這種程式碼組織方式,在 WIN32 上將 Postgres 作為服務執行時,可能會丟失一些訊息,因為沒有可用的 stderr,並且由於這個原因,StringInfoData(儲存 stderr 訊息)的處理相當令人困惑。此提交將 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 測試的錯誤訊息非常簡短,可以為新入職的開發者提供更多幫助。此處添加了一個小提示,說明如何在這些情況下執行測試。作者:Kevin Burke kevin@burke.dev 討論:https://postgr.es/m/CAKcy5ejKVYwUXguQcd6i9KHDm7cM7FzjQ+aayaPveoa_woyQpQ@mail.gmail.com https://git.postgresql.org/pg/commitdiff/b5cb4db91327c2cef66207bde9cbcb592b91f93c
在構建 libpq 時,在 exit() 檢查方面提供錯誤提示。提交 dc227eb82 引入了對 libpq 的限制,即不允許呼叫任何呼叫 exit() 的函式。在 e45b0dfa1f、2f7bae2f92 和 792259591 中進一步完善和修復了這一點。雖然這在 Makefile 中有詳細記錄,但當檢查失敗時發出的錯誤訊息非常簡短,對於沒有先前背景的新開發人員來說,沒有提供任何提示。此處添加了一個錯誤提示,以幫助新開發人員入職 PostgreSQL。作者: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() 呼叫的檢查。提交 e9bc0441f 為 libpq 的 exit() 檢查添加了 errorhint,但意外地將 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 對映文字檔案。有幾個較新的可用。沒有功能性差異,但我們還是將它們包含進來,這樣下次有人想在這個領域進行實際工作時就不會有意外的 diff。 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 支援函式(提交 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 的預設區域對映。這裡有兩個明確的改進:* 將“Greenwich Standard Time”對映到 Atlantic/Reykjavik 比使用倫敦更合適,因為冰島自 1968 年以來就沒有實行夏令時,所以這更接近人們的期望。* 由於“Samoa”區域被指定為 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 中的空指標崩潰。提交 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,儘管文件自提交 dea6ba939 起就一直說最低版本是 5.8.3。根據該提交之前的討論,我(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。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
文件:改進 ^@ starts-with 運算子的描述。該運算子從未正式記錄在任何地方。為了給它一個自然的歸宿,將 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
修復 TestLib::slurp_file() 在 windows 上的偏移量問題。3c5b0685b921 使用 setFilePointer() 設定檔案控制代碼的位置,但傳遞了錯誤的檔案控制代碼,總是將位置留在 0。與其僅僅修復它,不如移除 setFilePointer() 的使用,我們現在有一個 perl 檔案描述符,所以可以直接使用 perl 的 seek()。此外,perl 檔案控制代碼沒有關閉,只有 windows 檔案控制代碼關閉了。審稿人:Andrew Dunstan andrew@dunslane.net 作者:Andres Freund andres@anarazel.de 討論:https://postgr.es/m/20211003173038.64mmhgxctfqn7wl6@alap3.anarazel.de 回溯:9.6-,與 3c5b0685b921 相同 https://git.postgresql.org/pg/commitdiff/2f74db1236fe83e6665e5b0ddad4454c69495614
Bruce Momjian 已推送
Fujii Masao 提交
psql:改進 LOCK TABLE 的製表符補全。此提交使 psql 支援 LOCK TABLE 命令的 ONLY 和 NOWAIT 關鍵字的製表符補全。作者:Koyu Tanigawa 審稿人: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)的描述中被提及,因此新增簡短描述是合理的。作者:Ian Lawrence Barwick 審稿人:Laurenz Albe,Fujii Masao 討論:https://postgr.es/m/CAB8KJ=infievn4q1N4X7Vx8w4_RMPPG0pLvxhSDjy5WQOSHW9g@mail.gmail.com https://git.postgresql.org/pg/commitdiff/f6b5d05ba9a4ac7c5ebec76045c6e0afcf7c9eec
在發現無效頁頭時,使恢復報告錯誤訊息。提交 0668719801 更改了 XLogPageRead(),使其驗證頁頭,如果發現無效頁頭,則重置錯誤訊息並重試讀取頁面,以修復流複製備機卡在連續記錄上的情況。此更改隱藏了關於無效頁頭的錯誤訊息,這會使使用者更難調查 WAL 中實際存在的問題。為了解決這個問題,此提交使 XLogPageRead() 在發現無效頁頭時報告錯誤訊息。當不在備用模式下時,無效頁頭應該導致恢復結束,而不是重試讀取頁面,因此 XLogPageRead() 不需要為重試驗證頁頭。相反,ReadPageInternal() 應該負責在這種情況下進行驗證。因此,此提交更改了 XLogPageRead(),以便在不在備用模式下時,它不會為重試驗證頁頭。報告者:Yugo Nagata 作者:Yugo Nagata,Kyotaro Horiguchi 審稿人: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_CHECKUMS,預設值為 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 歷來使用硬編碼的語法。為了提高未來的可擴充套件性,這裡也採用了靈活的選項語法。在新語法中,不再是三個互斥的選項 EXPORT_SNAPSHOT、USE_SNAPSHOT 和 NOEXPORT_SNAPSHOT,而是現在有一個 SNAPSHOT 選項,有三個可能的值:'export'、'use' 和 'nothing'。此提交不移除對舊語法的支援。它只是添加了新語法作為附加選項,並讓 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 回溯至:13 討論:https://postgr.es/m/CA%2BHiwqGQNbtamQ_9DU3osR1XiWR4wxWFZurPmN6zgbdSZDeWmw%40mail.gmail.com https://git.postgresql.org/pg/commitdiff/700c73312841bd1a89263f238556ce8d8d916258
postgres_fdw:修復 connection.c 中的註釋。提交 27e1f1456 未更新一些註釋。審稿人:Bharath Rupireddy 回溯至:14 討論:https://postgr.es/m/CAPmGK15Q2Nm6U%2Ba_GwskrWFEVBZ9_3VKOvRrprGufpx91M_3Sw%40mail.gmail.com https://git.postgresql.org/pg/commitdiff/972c7c6567fbb02a59b94ede80b17805de1bc03c