https://archives.postgresql.org/pgsql-jobs/2021-07/
Planet PostgreSQL: https://planet.postgresql.org/
PostgreSQL 每週新聞由 David Fetter 本週為您帶來
請在太平洋標準時間/太平洋夏令時間星期日下午 3:00 前將新聞和公告提交至 david@fetter.org。
Michaël Paquier 推送了
pageinspect:改善 32kB 頁面的 page_header()。ld_upper、ld_lower、pd_special 和頁面大小一直使用 smallint 作為返回類型,對於配置為 32kB 頁面大小的版本,這可能導致這些欄位返回負值。將 pageinspect 升級到 1.10。當使用舊版本的擴充程式時,page_header() 能夠在運行時處理這些欄位的正確返回類型,並添加了一些測試來涵蓋這一點。作者:Quan Zongliang 審閱人:Michael Paquier、Bharath Rupireddy 討論:https://postgr.es/m/8b8ec36e-61fe-14f9-005d-07bc85aa4eed@yeah.net https://git.postgresql.org/pg/commitdiff/127404fbe28455d6e8183fa58f3b7aefeba8f909
修正 Windows 的 stat() 針對待刪除檔案的問題。由 bed9075 引入的代碼,用於增強 Windows 上大於 4GB 檔案大小的 stat() 實現,無法正確檢測使用 NtQueryInformationFile() 或 GetFileInformationByHandleEx() 方法的待刪除檔案,正如 Alexander Lakhin 在他自己的自定義 TAP 測試中所證明的那樣。在 ERROR_ACCESS_DENIED (EACCES) 上失敗時,open() 實現中使用的休眠和迴圈方法顯示出更高的穩定性,因此切換到此方法。如果權限問題持續存在的時間遠遠超過使用的 1 秒超時時間,這仍然可能導致問題,但在效能關鍵路徑中應該(希望)永遠不會發生這種情況。儘管如此,為了處理重負載的機器,增加超時時間可能是有意義的。請注意,WIN32 的 open() 現在使用 microsoft_native_stat(),因為在解決併發檔案刪除問題時,它應該與 stat() 類似。我花了一些時間,將此補丁與 genfile.c 中的 SQL 函數結合使用 pgbench 進行測試,並在線程上使用 MSVC 版本運行提供的 TAP 測試,這看起來比以前的方法更穩定。作者:Alexander Lakhin 審閱人:Tom Lane、Michael Paquier、Justin Pryzby 討論:https://postgr.es/m/c3427edf-d7c0-ff57-90f6-b5de3bb62709@gmail.com 向後移植:14 https://git.postgresql.org/pg/commitdiff/54fb8c7ddf152629021cab3ac3596354217b7d81
恢復 "修正 Windows 的 stat() 針對待刪除檔案的問題"。根據 fairywren 報告的關於 MinGW 因缺少 microsoft_native_stat() 而引起的問題,恢復提交 54fb8c7。僅使用 stat() 用於 MSVC 不足以解決待刪除檔案的併發問題。可以在代碼中繪製一些 MINGW64 以在此構建上下文中切換到 stat() 的不同實現,但我不確定是否依靠 MinGW 中的 stat() 實現來解決我們嘗試修復的問題是否足夠。所以這需要更多的研究。討論:https://postgr.es/m/YOvOlfRrIO0yGtgw@paquier.xyz 向後移植:14 https://git.postgresql.org/pg/commitdiff/2c9b46c090e76c62f24563b9be2c34e6b92e9329
正確安裝 fe-auth-sasl.h。SASL 的前端回調的內部結構在 libpq-int.h 中可見,但標頭未被安裝。這將導致使用 libpq 內部結構的應用程式編譯失敗。問題在 9fd8557 中引入。作者:Mikhail Kulagin 審閱人:Jacob Champion 討論:https://postgr.es/m/05ce01d777cb$40f31d60$c2d95820$@postgrespro.ru https://git.postgresql.org/pg/commitdiff/6c9c2831668345122fd0f92280b30f3bbe2dd4e6
刪除 postmaster.c 中不必要的斷言。一個代碼路徑斷言歸檔程式已死,但一個檢查使得不可能發生這種情況。作者:Bharath Rupireddy 討論:https://postgr.es/m/CALj2ACW=CYE1ars+2XyPTEPq0wQvru4c0dPZ=Nrn3EqNBkksvQ@mail.gmail.com 向後移植:14 https://git.postgresql.org/pg/commitdiff/dc2db1eac365b97c9129393acfe11102859f9e23
為 pg_receivewal 的 ZLIB 壓縮添加 TAP 測試。在 pg_receivewal 中,有大量的代碼處理 ZLIB 壓縮,從格式名稱等基礎知識,到開始流位置的計算,當然還有壓縮本身,但沒有自動化的覆蓋。此提交引入了一組有條件的測試(如果構建支援 ZLIB)來涵蓋 ZLIB 壓縮 WAL 段的創建、部分壓縮 WAL 段的處理以及壓縮操作本身。請注意,有一個額外的階段,通過直接使用 gzip 命令來檢查生成檔案的有效性,該命令由 pg_receivewal 的 Makefile 傳遞下來。如果找不到該命令,則會跳過此部分,這很可能在 Windows 上使用 MSVC 發生,除非在測試環境中設置變數 GZIP_PROGRAM。這組測試對於即將推出的補丁將變得方便,這些補丁為 pg_receivewal 使用的壓縮方法添加了更多選項,例如 LZ4,以確保沒有現有的設施被破壞。作者:Georgios Kokolatos 審閱人:Gilles Darold、Michael Paquier 討論:https://postgr.es/m/07BK3Mk5aEOsTwGaY77qBVyf9GjoEzn8TMgHLyPGfEFPIpTEmoQuP2P4c7teesjSg-LPeUafsp1flnPeQYINMSMB_UpggJDoduB5EDYBqaQ=@protonmail.com https://git.postgresql.org/pg/commitdiff/ffc9ddaea33f6dfd3dfa95828a0970fbb617bf8a
修正 pg_receivewal 的 TAP 測試中 gzip 的可移植性問題。gzip 的 OpenBSD 實現僅將以 "Z"、"gz"、"z"、"tgz" 或 "taz" 為後綴的檔案視為有效目標,丟棄其他任何內容,並且如果找到任何無效的檔案,則使用 --test 退出命令並返回錯誤代碼 512。在 ffc9dda 中引入的測試測試了一個以 .gz.partial 為後綴的 WAL 段,足以使測試失敗。就覆蓋範圍而言,僅測試完整段就足夠了,因此通過在此檢查中丟棄 .gz.partial 段來簡化代碼。這應該足以使測試在 OpenBSD 環境中通過。根據 curculio 的報告。討論:https://postgr.es/m/YPAdf9r5aJbDoHoq@paquier.xyz https://git.postgresql.org/pg/commitdiff/0da3c1bc3f7261d5157f5b86ade88e8b379f8686
針對 pg_receivewal,在 Windows 上停用涉及 ZLIB 的測試。正如 buildfarm 成員 bowerbird 所報告,這些測試在 Windows 上不穩定。那裡產生的失敗指向 gzflush() 的問題,該函數無法同步新開啟的檔案與正確開啟的 gzFile。當我自己使用 MSVC 測試這個問題時,我遇到了一個不同的錯誤,其中一個檔案根本無法開啟,因此我相當懷疑在 Windows 上測試這個區域是否是一個好主意,如果這最終會導致隨機的並行失敗。這需要更多的調查,並且讓這個 buildfarm 成員長期處於紅色狀態不是一件好事,所以目前這只是在 Windows 上停用這組測試。討論:https://postgr.es/m/YPDLz2x3o1aX2wRh@paquier.xyz https://git.postgresql.postgresql.org/pg/commitdiff/6cea447e6a10cd7ef511470e809a894a013e6a18
Heikki Linnakangas 推送了
移除對本地變數的無效賦值。這應該在 commit 7e30c186da 中移除,該 commit 將迴圈拆分為兩個。只有第一個迴圈使用 'from' 變數;在第二個迴圈中更新它是無意義的。在第一個迴圈之後,它從未被讀取過,所以這是無害的,並且肯定被編譯器優化掉了,但讓我們把它整理一下。反向移植到所有支援的版本。作者:Ranier Vilela 討論:https://postgres.tw/message-id/CAEudQAoWq%2BAL3BnELHu7gms2GN07k-np6yLbukGaxJ1vY-zeiQ%40mail.gmail.com https://git.postgresql.org/pg/commitdiff/4c64b51dc51f8ff7e3e51eebfe8d10469a577df1
在 psql \copy from 中,以更大的區塊將資料傳送到伺服器。 以前,我們會將每一行作為單獨的 CopyData 訊息傳送。如果表格很窄,這會非常浪費,因為每個 CopyData 訊息都有 5 個位元組的 overhead。為了提高效率,緩衝並將 8 kB 的輸入資料打包到每個 CopyData 訊息中。伺服器還會在 COPY TO STDOUT 中將每一行作為單獨的 CopyData 訊息傳送,這同樣很浪費。但這已記錄在 FE/BE 協定描述中,因此更改它會中斷線路協定。 Reviewed-by:Aleksander Alekseev 討論:https://postgres.tw/message-id/40b2cec0-d0fb-3191-2ae1-9a3fe16a7e48%40iki.fi https://git.postgresql.org/pg/commitdiff/eec57115e4c866f26bdc8bcbe3e2e7be4c6d0450
Peter Eisentraut 推送了
doc:修正函數原型中的錯字。https://git.postgresql.org/pg/commitdiff/5b60cf35f566697030a2895dfe27dde2e34dd370
修正缺少訊息的複數化。https://git.postgresql.org/pg/commitdiff/55b2a2340758da8ff11357d719d169f264ac7112
修正語法檔案中一些非標準的 C 程式碼縮排。https://git.postgresql.org/pg/commitdiff/9aa8268faa0ec2904f55e85be5ec7b365c98edd1
doc:拼字檢查。https://git.postgresql.org/pg/commitdiff/46111fb7b57876a87eb0630ec12ad30950e38a39
Tom Lane 推送了
將 RelationOpenSmgr() 替換為 RelationGetSmgr()。此修補程式背後的想法是設計出像 commit 9d523119f 修復的錯誤。 以前,一旦執行 RelationOpenSmgr(rel),就可以直接訪問 rel->rd_smgr,但時間間隔不甚明確。但是由於該指標會被 relcache 清除,因此由於過度依賴之前的 RelationOpenSmgr 呼叫仍然有效而產生了錯誤。現在,除了 rel.h 和 relcache.c 中的程式碼之外,很少有程式碼可以直接接觸 rd_smgr 欄位。正常的編碼規則是使用 RelationGetSmgr(rel),並且不期望結果的有效期超過一次 smgr 函數呼叫。在幾個地方,每次都使用該函數似乎矯枉過正,但它們現在都用大型警告註解進行了註釋。Amul Sul,來自我的想法。討論:https://postgr.es/m/CANiYTQsU7yMFpQYnv=BrcRVqK_3U3mtAzAsJCaqtzsDHfsUbdQ@mail.gmail.com https://git.postgresql.org/pg/commitdiff/f10f0ae420ee62400876ab34dca2c09c20dcd030
以更 macOS 友好的方式探測 preadv/pwritev。 Apple 處理僅在某些作業系統版本中可用的函數的機制混淆了 AC_CHECK_FUNCS,因此也混淆了 AC_REPLACE_FUNCS。我們可以改用 AC_CHECK_DECLS,只要我們啟用 -Werror=unguarded-availability-new。這允許為 macOS 編譯的人們透過設定 MACOSX_DEPLOYMENT_TARGET 來控制是否使用 preadv/pwritev,而不是提供 back-rev SDK。(當然,後者仍然有效。) James Hilliard 討論:https://postgr.es/m/20210122193230.25295-1-james.hilliard1@gmail.com https://git.postgresql.org/pg/commitdiff/f014b1b9bb8eda4e82c1805969dbae2b07b7d54d
將 debug_invalidate_system_caches_always 重新命名為 debug_discard_caches。 commit 4656e3d66 引入的名稱被認為過於冗長。為了配合此變更,將 initdb 最近新增的 --clobber-cache 選項重新命名為 --discard-caches。討論:https://postgr.es/m/1374320.1625430433@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/d68a00391214be2020e49be4b55f761d47a5c229
在用 Const 替換 Param 時,複製 Param 的 location 欄位。 這允許 Param 替換產生與字面寫入常數值完全相同的結果。 雖然就目前的 core 程式碼而言幾乎沒有什麼關係,但擴充功能可能會對節點位置欄位更感興趣。 Julien Rouhaud 討論:https://postgr.es/m/20170311220932.GJ15188@nol.local https://git.postgresql.org/pg/commitdiff/be850f1822e4b54d1d570eefa8a7242788011634
確保 MSVC 組建中的 HAVE_DECL_XXX 巨集與 Unix 中的巨集匹配。 Autoconf 的 AC_CHECK_DECLS() 始終將 HAVE_DECL_whatever 定義為 1 或 0,但 msvc/Solution.pm 中的某些條目顯示這些符號為 "undef" 而不是 0。修正它以保持一致性。在目前的用法中 AFAICS 沒有實時錯誤,但是如果添加更複雜的 #if 測試,則不難想像一個悄悄潛入。反向修補到 v13,這是 Solution.pm 包含此資料的最早版本。較舊分支的手動填充的 pg_config_ext.h.win32 檔案中仍然存在不一致性;但是只要問題只是潛在的,似乎就不值得花費精力來清理這些檔案。討論:https://postgr.es/m/3185430.1626133592@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/e529b2dc37ac80ccebd76cdbb14966d3b40819c9
在 pg_depend 中用 OID 範圍測試替換顯式的 PIN 條目。 從 v14 開始,pg_depend 包含近 7000 個 "pin" 條目,用於記錄內建物件的 OID。對於每個資料庫來說,這都是相當大的膨脹,並且還增加了 pg_depend 查找以及 initdb 的時間。 我們可以刪除所有這些條目,轉而使用 OID 範圍檢查,即 "低於 FirstUnpinnedObjectId 的 OID 被固定"。 (template1 和 public schema 是例外。 這些例外現在被連接到 IsPinnedObject() 中,而不是 initdb 的程式碼來填充 pg_depend,但無論哪種方式,它的 cruft 數量都相同。) pg_shdepend 的內容也同樣被修改。討論:https://postgr.es/m/3737988.1618451008@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/a49d081235997c67e8aab7a523b17e8d1cb93184
Doc:記錄 current-transaction-modes GUC。 我們有 default_transaction_isolation 等的文檔,但由於某種原因沒有 transaction_isolation 等的文檔。 AFAICS 這只是一個古老的疏忽,所以修復它。 根據 Yanliang Lei 的錯誤 #17077。討論:https://postgr.es/m/17077-ade8e166a01e1374@postgresql.org https://git.postgresql.org/pg/commitdiff/665c5855e5820531f500dad50f29f377af537ecc
Thomas Munro 推送了
為 psql 的 \watch 命令新增 PSQL_WATCH_PAGER。允許 \watch 命令使用分頁程式。這個功能雖然可用,但對於傳統的分頁程式(例如 "less")來說並不是非常有用,因此使用不同的環境變數。流行的開源工具 "pspg"(也是 Pavel 開發的)知道如何顯示輸出,如果您設定 PSQL_WATCH_PAGER="pspg --stream"。為了使 \watch 在使用者退出分頁程式或按下 ^C 時能快速反應,並提高其計時的準確性並降低無用的上下文切換率,將 \watch 命令的主迴圈更改為在 Unix 上使用 sigwait() 而不是睡眠/輪詢迴圈。目前僅在 Unix 上支援(與 pspg 相同)。作者:Pavel Stehule pavel.stehule@gmail.com 作者:Thomas Munro thomas.munro@gmail.com 討論:https://postgr.es/m/CAFj8pRBfzUUPz-3gN5oAzto9SDuRSq-TQPfXU_P6h0L7hO%2BEhg%40mail.gmail.com https://git.postgresql.org/pg/commitdiff/7c09d2797ecdf779e5dc3289497be85675f3d134
sigwait 的移植性修正。在運行舊版 HPUX 和 Solaris 的建置伺服器上有來自 POSIX 草案版本的非標準 sigwait(),因此它們不喜歡 commit 7c09d279。為了避免一般性的問題,只有在 <signal.h> 宣告了 sigwait() 且符合預期宣告時,才嘗試使用 sigwait()。為了在 Solaris 上選擇現代宣告(即使在非線程程式中),將 -D_POSIX_PTHREAD_SEMANTICS 移動到正確的位置以影響所有翻譯單元。並修正錯誤檢查。現代 sigwait() 不會設定 errno。感謝 Tom Lane 在這方面的幫助。討論:https://postgr.es/m/3187588.1626136248%40sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/5865e064abfbbe11ebfc09881be009c0f69b4dc2
David Rowley 推送了
修正 tuplesort 中的理論錯誤。這修正了 tuplesort.c 中的一個理論錯誤,如果將有界排序與 byval Datum 排序 (tuplesort_begin_datum) 結合使用,在 make_bounded_heap() 中將排序切換到有界堆時,我們會調用 free_sort_tuple()。問題是,當對 byval 類型的 Datums 進行排序時,tuple 為 NULL,而 free_sort_tuple() 無論如何都會釋放它的記憶體。這將導致崩潰。在這裡,我們只需添加一個檢查來查看 tuple 是否為 NULL,然後才嘗試分離和釋放屬於它的任何記憶體來修正它。這個錯誤只是理論上的原因是因為在目前的程式碼庫中,我們沒有在執行 Datum 排序時執行 tuplesort_set_bound()。但是,讓我們回溯一個修復程式,因為如果任何擴充以這種方式使用程式碼,則很可能會導致問題。作者:Ronan Dunklau 討論:https://postgr.es/m/CAApHDvpdoqNC5FjDb3KUTSMs5dg6f+XxH4Bg_dVcLi8UYAG3EQ@mail.gmail.com 回溯到:9.6,支援的最舊版本 https://git.postgresql.org/pg/commitdiff/41469253e970b539a4ae75226dd4f226b7b2bc8c
增強 tuplesort 的 free_sort_tuple 函數的穩健性。 41469253e 不遺餘力地透過檢查 tuple 在釋放之前是否為 NULL 來從 free_sort_tuple 中刪除一個理論錯誤。 讓我們使它更強大一些,方法是將 tuple 設定為 NULL,以便如果再次調用它,我們最終不會對已經 pfree 的 tuple 執行 pfree。 根據 Tom Lane 的建議。討論:https://postgr.es/m/3188192.1626136953@sss.pgh.pa.us 回溯到:9.6,與 41469253e 相同 https://git.postgresql.org/pg/commitdiff/5bd38d2f2846c7e387d04a16c4372da0de7b1221
刪除 INT8 序列上的無用範圍檢查。 檢查 INT8 序列的 seqmin 和 seqmax 值是否超出 int64 類型的最小值和最大值範圍毫無意義。 這兩者都使用相同的底層類型,因此 INT8 當然不能超出 int64 支援的最小值和最大值。 此程式碼相當無害,並且似乎大多數編譯器都會對其進行優化,但無論如何,讓我們刪除它,並用一小段註解來提及為什麼不需要檢查。 作者:Greg Nancarrow,註解由 David Rowley 修訂 討論:https://postgr.es/m/CAJcOf-c9KBUZ8ow_6e%3DWSfbbEyTKfqV%3DVwoFuODQVYMySHtusw%40mail.gmail.com https://git.postgresql.org/pg/commitdiff/e0271d5f1e871dd61efc26bda8a0b556c7935901
將結果快取節點的名稱變更為 Memoize。 "Result Cache" 從來都不是這個節點的好名稱,但沒有人想出任何人都喜歡的另一個名稱。 直到 David Johnston 提到 "Node Memoization",Tom Lane 將其修改為 "Memoize"。 人們似乎喜歡 "Memoize",所以讓我們執行重命名。 審閱人:Justin Pryzby 討論:https://postgr.es/m/20210708165145.GG1176@momjian.us 回溯到:14,引入 Result Cache 的地方 https://git.postgresql.org/pg/commitdiff/83f4fcc65503c5d4e5d5eefc8e7a70d3c9a6496f
Amit Kapila 推送了
*
修改輸出外掛程式 (pgoutput) 以實作新的雙階段 API 回呼,方法是利用擴展複製協定。 *
修改複製應用工作程序,以透過在準備時重播它們來正確處理雙階段交易。 *
添加一個新的 SUBSCRIPTION 選項 "two_phase",以允許使用者啟用雙階段交易。 我們在初始資料同步完成後啟用 two_phase。 但是,我們必須明確禁用在複製槽建立期間複製雙階段交易,即使外掛程式支援它。 我們不需要複製在此階段累積的變更,而且我們沒有開啟複製連線,因此我們不知道將資料發送到哪裡。 streaming 選項不允許使用這個新的 two_phase 選項。 這可以作為一個單獨的修補程式完成。 我們不允許切換訂閱的 two_phase 選項,因為它可能導致不一致的副本。 出於同樣的原因,我們不允許在訂閱啟用 two_phase 後刷新發布,除非 copy_data 選項為 false。 作者:Peter Smith、Ajin Cherian 和 Amit Kapila 基於 Nikhil Sontakke 和 Stas Kelvich 的先前工作 審閱人:Amit Kapila、Sawada Masahiko、Vignesh C、Dilip Kumar、Takamichi Osumi、Greg Nancarrow 測試人:Haiying Tang 討論:https://postgr.es/m/02DA5F5E-CECE-4D9C-8B4B-418077E2C010@postgrespro.ru 討論:https://postgr.es/m/CAA4eK1+opiV4aFTmWWUF9h_32=HfPOW9vZASHarT0UA5oBrtGw@mail.gmail.com https://git.postgresql.org/pg/commitdiff/a8fd13cab0ba815e9925dc9676e6309f699b5f72Magnus Hagander 推送了
John Naylor 推送了
Dean Rasheed 推送了
改善「衝突或冗餘選項」錯誤的回報。在回報「衝突或冗餘選項」錯誤時,嘗試確保使用 errposition(),以協助使用者識別造成問題的選項。先前,errposition() 的使用率低於 60%。此修補程式將其提高到 90% 以上,但仍然有一些 ParseState 無法輕易取得的地方。在這種情況下,使用 errdetail() 可能會改善錯誤訊息,但這將留待日後處理。此外,由於此錯誤從程式碼庫中的 100 多個地方拋出,因此引入一個專用函式來拋出它,以減少程式碼重複。摘自 Vignesh C. 撰寫的一個稍微大一點的修補程式。由 Bharath Rupireddy、Alvaro Herrera、Dilip Kumar、侯志傑、Peter Smith、Daniel Gustafsson、Julien Rouhaud 和我審閱。討論:https://postgr.es/m/CALDaNm33FFSS5tVyvmkoK2cCMuDVxcui=gFrjti9ROfynqSAGA@mail.gmail.com https://git.postgresql.org/pg/commitdiff/2bfb50b3df11399ed80347dd03bfaf8cd5acf962
改善 CREATE COLLATION 選項的錯誤檢查。檢查衝突或冗餘選項,就像我們對大多數其他指令一樣。多次指定任何選項充其量是多餘的,並且很可能表示使用者的程式碼中存在錯誤。同時,透過新增詳細資訊文字(與 CREATE DATABASE 相同)來改善衝突的 locale 選項的錯誤訊息。Bharath Rupireddy 撰寫,由 Vignesh C. 審閱。我做了一些額外的修改。討論:https://postgr.es/m/CALj2ACWtL6fTLdyF4R_YkPtf1YEDb6FUoD5DGAki3rpD+sWqiA@mail.gmail.com https://git.postgresql.org/pg/commitdiff/ba620760c4c8ca90ff83ecf7e4d46f5ec4dabd7b
Alexander Korotkov 推送了更新
修正 multirange 運算子的目錄定義中的一些小不一致之處。此提交修正了幾個 multirange 運算子的描述,以及另一個 multirange 運算子的 oprjoin。oprjoin 的變更更像是外觀上的,因為舊的和新的函式都回傳相同的常數。這些外觀上的變更不值得導致 14beta2 和 14beta3 之間的目錄不相容。因此,catversion 沒有遞增。討論:https://postgr.es/m/CAPpHfdv9OZEuZDqOQoUKpXhq%3Dmc-qa4gKCPmcgG5Vvesu7%3Ds1w%40mail.gmail.com 向後移植:14 https://git.postgresql.org/pg/commitdiff/768ea9bcf98120eef01a6deea9c5c6997b153ab1
支援 unnest(multirange)。據發現,multirange 缺少將它們分解為個別範圍的能力。訂閱和適當的擴展物件表示需要大量工作,而且對於 v14 來說太晚了。此提交提供了 unnest(multirange) 的實作,這非常簡單。unnest(multirange) 被定義為多型程序。Catversion 已遞增。回報者:Jonathan S. Katz 討論:https://postgr.es/m/flat/60258efe-bd7e-4886-82e1-196e0cac5433%40postgresql.org 作者:Alexander Korotkov 審閱者:Justin Pryzby, Jonathan S. Katz, Zhihong Yu, Tom Lane 審閱者:Alvaro Herrera https://git.postgresql.org/pg/commitdiff/9e3c217bd98da803709872a8612577d88a39329a
忘記 9e3c217bd9 的 catversion 遞增。https://git.postgresql.org/pg/commitdiff/f157db862225a7bfe041ca3f7b73e913e2a8d8d6
Daniel Gustafsson 推送了更新
Álvaro Herrera 推送了更新
在無效化槽之後,正確推進舊區段邊界。當由於 max_slot_wal_keep_size 限制而使某些槽無效時,應向前移動舊區段邊界以保持在限制範圍內。但是,在提交 c6550776394e 中,我們忘記再次呼叫 KeepLogSeg,以在無效化複製槽之後重新計算邊界。在其他槽保留的情況下,最終會因為其他原因而重新計算限制,但是如果所有槽都無效,則限制之後將根本不會移動。修復。向後移植到引入該功能的 13。作者:Kyotaro Horiguchi horikyota.ntt@gmail.com 回報者:Marcin Krupowicz mk@071.ovh 討論:https://postgr.es/m/17103-004130e8f27782c9@postgresql.org https://git.postgresql.org/pg/commitdiff/ead9e51e82363a0e492d56aee83ed11b3759a615
將列觸發器複製到分割區時,保留觸發時的狀態。將觸發器從分割資料表複製到其分割區時,不會傳播 'tgenabled' 旗標(origin/replica/always/disable)。使其成為這樣,分割區上的觸發器上的旗標最初設定為與分割資料表上的值相同。新增一個測試案例來驗證該行為。向後移植到 11,該問題出現在提交 86f575948c77 中。作者:Álvaro Herrera alvherre@alvh.no-ip.org 回報者:Justin Pryzby pryzby@telsasoft.com 討論:https://postgr.es/m/20200930223450.GA14848@telsasoft.com https://git.postgresql.org/pg/commitdiff/df80fa2ee50478391445cef03e42c1b3d64fccca
修復 pg_dump 對於分割資料表上已停用的觸發器。pg_dump 無法保留分割區的 'enabled' 旗標(不僅可以停用,還可以是 REPLICA 或 ALWAYS),這些分割區已從其各自的父級變更了該旗標。嘗試透過在轉儲中包含此類觸發器的定義來處理該問題,但將標準 CREATE TRIGGER 行替換為 ALTER TRIGGER 行。向後移植到 11,這些觸發器可以在其中存在。在 11 和 12 分支中,從提交 b9b408c48724 中取得一些測試行,以驗證 pg_upgrade 對於這些配置是可以接受的。共同作者:Justin Pryzby pryzby@telsasoft.com 共同作者:Álvaro Herrera alvherre@alvh.no-ip.org 討論:https://postgr.es/m/20200930223450.GA14848@telsasoft.com https://git.postgresql.org/pg/commitdiff/f0e21f2f61675f4e56ae53d32ea54d587a7c2257
使新的複製槽測試程式碼減少競爭。ead9e51e8236 中新增的新的測試程式碼具有競爭性 - 它取決於共享記憶體狀態,該狀態在記錄 WARNING 訊息之前發生變更。以另一種方式放置它。向後移植到 13。作者:Álvaro Herrera alvherre@alvh.no-ip.org 討論:https://postgr.es/m/202107161809.zclasccpfcg3@alvherre.pgsql https://git.postgresql.org/pg/commitdiff/8589299e03fff012e0bbb9716693750a0d68eef7
David Rowley 發送了另一個修訂版的修補程式,以追蹤新增到 RelOptInfo 結構的 Bitmapset 中的未修剪分割區,並允許在更多情況下進行排序的分割區掃描。
Hayato Kuroda 發送了另一個修訂版的修補程式,以修復 ECPG 中的 DEALLOCATE 和 DESCRIBE。
David Rowley 發送了另一個修訂版的修補程式,以加速在事務中存取多個關係之後的事務完成。
侯志傑發送了另一個修訂版的修補程式,使其可以在寫入的內容中使用並行操作。
Rahila Syed 發送了另兩個修訂版的修補程式,使其可以按欄位篩選邏輯複製。
Álvaro Herrera 發送了一個修補程式,旨在修復一個錯誤,該錯誤表現為插入到分割區中時,未更新分割區檢查。
Jeevan Ladhe 發送了兩個修訂版的修補程式,以在錯誤訊息中指定 pg_upgrade 中哪些資料庫發生了錯誤。
Magnus Hagander 發送了另一個修訂版的修補程式,以新增對 PROXY 協定的支援。
Bharath Rupireddy 發送了一個修補程式,以使用 WaitLatch 作為 {pre, post}_auth_delay,而不是 pg_usleep。
Vigneshwaran C 發送了三個修訂版的修補程式,以將架構層級的粒度新增到 PUBLICATION。
John Naylor 發送了四個修訂版的修補程式,以加速驗證 UTF-8。
David Rowley 發送了四個修訂版的修補程式,以新增對 ORDER BY / DISTINCT 聚合的適當計畫器支援。
Ronan Dunklau、David Rowley 和 Ranier Vilela 交流了補丁,以便在 ExecSort 中使用最佳化的單一資料元組排序 (single-datum tuplesort)。
Masahiro Ikeda 送出了兩個修訂版本的補丁,以修正 heap_prune_chain() 中的一些錯誤註解。
Alexander Lakhin 送出了另一個修訂版本的補丁,旨在修復一個在 Win32 上表現為花費更多時間在「delete pending」中的錯誤。
Tom Lane 送出了另一個修訂版本的補丁,以減少 pending inval 訊息的記憶體消耗。
Peter Smith 送出了一個補丁,以避免不必要地呼叫 PGserverVersion。
Craig Ringer 送出了一個補丁,教導 pgflex.pl 和 pgbision.pl 讀取 buildenv.pl 以取得工具名稱,並在 config.pl 中支援額外的前置處理器定義。
Maxim Orlov 送出了另一個修訂版本的補丁,以修復平行 worker 的 failed assertion 和核心轉儲 (core dump)。
Tom Lane 送出了另一個修訂版本的補丁,旨在修復一個在不同 DB 定序 (collation) 的資料表上使用 merge join,並透過 postgres_fdw 時發生的錯誤。
Peter Smith 和 Euler Taveira de Oliveira 交流了補丁,以新增邏輯複製的列篩選功能。
Ian Barwick 送出了一個補丁,以文件化 pg_encoding_to_char() 和 pg_char_to_encoding()。
Fabien COELHO 送出了另一個修訂版本的補丁,將 psql 的 echo 程式碼提取出來。
Heikki Linnakangas 送出了另一個修訂版本的補丁,以重構 LogicalTapeSet/LogicalTape 介面,使其不再需要預先知道將建立多少磁帶,並將多相合併演算法替換為簡單的平衡 k 路合併。
Heikki Linnakangas 送出了另一個修訂版本的補丁,為了安全性和清晰度移動了一些 ResourceOwnerEnlarge() 呼叫,使 resowners 更容易擴展,並最佳化了其中使用的雜湊函數。
Daniil Zakhlystov 送出了另一個修訂版本的補丁,以一般性地新增 zlib 和 zstd 串流壓縮,然後使用此基礎架構將其新增到 libpq。
Zhihong Yu 送出了兩個修訂版本的補丁,以 pfree() 一個 palloc() 字符串。
Ajin Cherian 送出了另一個修訂版本的補丁,以跳過邏輯複製的空交易。
Kyotaro HORIGUCHI 送出了另一個修訂版本的補丁,以嚴格檢查命令列和環境變數中的數值參數,並記錄這些變更對 PGCTLTIMEOUT 的影響。
Hou Zhijie 送出了一個補丁,以避免在 pg_dump 中重複呼叫 PQfnumber。
Gilles Darold 又送出了兩個修訂版本的補丁,允許透過 xact 註冊的回呼 (callback) 在任何命令開始時執行使用者定義的程式碼。
Peter Smith 送出了另一個修訂版本的補丁,以新增對串流交易的 prepare API 支援。
Huailing Liu 送出了一個補丁,以移除令人困惑的 SI inval。
Kyotaro HORIGUCHI 送出了另一個修訂版本的補丁,以從 XLogReadRecord 中移除 read_page 回呼。
Heikki Linnakangas 送出了另一個修訂版本的補丁,以新增 GIN 的 amcheck。
enis Hirn 送出了另一個修訂版本的補丁,以允許通用資料表表達式 (common table expressions) 中存在多個線性遞迴的自我引用。
Haiying Tang 送出了一個補丁,以收緊 psql tab-completes 的幫助輸出。
Vigneshwaran C 送出了另一個修訂版本的補丁,以在 CREATE/ALTER SUBSCRIPTION 期間識別 publisher 中遺失的 publication。
Arne Roland 送出了另一個修訂版本的補丁,以遞迴方式重新命名分割資料表上的觸發程序 (trigger)。
Andrey V. Lepikhov 送出了另一個修訂版本的補丁,教導最佳化器考慮非分割資料表與分割資料表的每個分割區進行 partitionwise join,並禁止使用非對稱機制來連接兩個分割(或附加)關係,因為這可能會在 NestLoop 路徑的重新參數化期間導致 CPU 和記憶體的巨大消耗。
Bharath Rupireddy 送出了另一個修訂版本的補丁,以消除使用「non-negative」的錯誤訊息的歧義。
Magnus Hagander 送出了一個補丁,用其 git 修訂版本標記 tarball。
Andrey V. Lepikhov 送出了另一個修訂版本的補丁,如果可以證明可以使用掃描替換 join,則移除關係到自身 (relation to itself) 的內部 join。
Ryohei Takahashi 送出了兩個修訂版本的補丁,以加速 COMMIT PREPARED。
Mark Dilger 送出了一個補丁,以停止忽略檔案關閉時的失敗。
Justin Pryzby 又送出了兩個修訂版本的補丁,以新增新的 metacommands \dn+ 來顯示每個 schema 的大小,並新增 \dA+ 來顯示 AM。
Aleksander Alekseev 送出了另一個修訂版本的補丁,以重構 procarray。
Yugo Nagata 送出了另一個修訂版本的補丁,以修復表現為 pgbench 錯誤和序列化/死鎖重試的錯誤。
Justin Pryzby 送出了另一個修訂版本的補丁,以支援 ALTER TABLE ... ACCESS METHOD,並允許指定分割資料表的存取方法 (access methods) 由分割區繼承。
Dilip Kumar 在 src/backend/replication/basebackup_gzip.c 中新增了一個遺失的 bbsink_forward_end_archive(sink)。
Kyotaro HORIGUCHI 送出了一個補丁,以修復 char-mapping 表格中的一些重複錯字。
Bertrand Drouvot 送出了另一個修訂版本的補丁,以在 standby 上實作最小邏輯解碼 (minimal logical decoding)。
Li Japin 和 Amit Kapila 交流了補丁,以禁止將複製槽 (replication slot) 名稱設定為空字串。
Ranier Vilela 送出了一個補丁,以取消 shadow 一些變數,並減少現代編譯器發出的 -Wsign-compare 警告。
Vigneshwaran C 送出了另一個修訂版本的補丁,以包含邏輯複製訊息描述中使用的實際資料類型。
James Coleman 送出了另一個修訂版本的補丁,以允許帶有 LIMIT/OFFSET 的平行 LATERAL 子查詢。
Dinesh Chemuduru 送出了一個補丁,以將新的診斷工具 PG_PARSE_SQL_STATEMENT 和 PG_PARSE_SQL_STATEMENT_POSITION 新增到 PL/pgsql。
Andrew Dunstan 又送出了三個修訂版本的補丁,以清理 PostgresNode.pm。
Álvaro Herrera 和 Ranier Vilela 交流了補丁,以從 slot.c 中移除一個毫無意義的 strlen。
Kyotaro HORIGUCHI 又送出了兩個修訂版本的補丁,使 FPI_FOR_HINT 遵循標準的 FPI 發射策略 (emitting policy)。
Yugo Nagata 送出了一個補丁,旨在修復一個在腳本開始時準備命令而不是在第一次執行命令時準備命令時表現為 bug 的錯誤。
Soumyadeep Chakraborty 送出了另一個修訂版本的補丁,透過使用 pgprocno 引用目標程序,從而避免掃描 ProcArray 並追蹤啟動程序,從而使 ProcSendSignal() 更有效率。
Yugo Nagata 和 Ranier Vilela 交流了補丁,旨在修復一個表現為 WAL 頁面標頭損壞永遠不會被報告的錯誤。
Atsushi Torikoshi 送出了一個補丁,以記錄執行 pg_import_system_collations() 的必要超級使用者權限。
Peter Smith 送出了一個補丁,以防止使用 strcpy 到 gid 緩衝區時可能發生的緩衝區溢位。
鳥越 淳 (Atsushi Torikoshi) 送出了另一個修補程式版本,該修補程式會新增一個函式,以記錄完整查詢字串及其在後端上針對指定程序 ID 正在執行的查詢計畫。