奧地利 pgDay 將於 2021 年 9 月 17 日在維也納 Schönbrunn 宮 (Apothekertrakt) 舉行。https://pgday.at/en/
pgSCV 0.7.0,一個與 Prometheus 相容的監控代理程式和 PostgreSQL 的指標匯出器,已發布。
pg_validate_extugprade 1.0.0beta,一個用於測試擴充套件升級過程各種組合的工具,已發布
pspg 5.1.0,一個專為 PostgreSQL 設計的分頁程式,已發布。https://github.com/okbob/pspg/releases/tag/5.1.0
Database Lab 2.4,一個用於快速複製大型 PostgreSQL 資料庫以構建非生產環境的工具,已發布:https://gitlab.com/postgres-ai/database-lab/-/releases
https://archives.postgresql.org/pgsql-jobs/2021-07/
Planet PostgreSQL: https://planet.postgresql.org/
PostgreSQL 每週新聞由 David Fetter 本週為您帶來
請在太平洋標準時間 (PST8PDT) 星期日下午 3:00 前將新聞和公告提交至 david@fetter.org。
Thomas Munro 推送了
支援 macOS 上的直接 I/O。Mac 不理解 O_DIRECT,但他們可以使用單獨的 fcntl() 呼叫來停用快取。擴充 fd.c 中的檔案開啟函式以在呼叫者傳入 PG_O_DIRECT 時為我們處理此問題。目前,這僅影響 WAL 資料,即使如此,也只有在您設定以下項目時才會生效:max_wal_senders=0 wal_level=minimal 預計這本身不會非常有用,但稍後提出的修補程式將會更多地使用直接 I/O,並且如果 Mac 上的開發人員可以看到效果,這將有助於測試。審閱人:Andres Freund andres@anarazel.de 討論:https://postgr.es/m/CA%2BhUKG%2BADiyyHe0cun2wfT%2BSVnFVqNYPxoO6J9zcZkVO7%2BNGig%40mail.gmail.com https://git.postgresql.org/pg/commitdiff/2dbe8905711ba09a2214b6e835f8f0c2c4981cb3
針對舊版 macOS 調整 commit 2dbe8905。斷言中使用的幾個開啟旗標在 macOS 10.4 中不存在。根據建置伺服器動物草原犬。也在此處新增 O_EXCL(還有一些更標準的旗標,但它們不相關並且可能遺失)。https://git.postgresql.org/pg/commitdiff/04cad8f7bcd63fac567e49fd72e6df42b3b251a9
請勿在類似函式的巨集引數中使用 #if。沒有報告具體問題,但過去已知會在某些編譯器上造成問題,因此我們應避免這樣做。報告人:Tom Lane tgl@sss.pgh.pa.us 討論:https://postgr.es/m/234364.1626704007%40sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/0c08856856f54056ce8db116e9d254fda114c383
jit:請勿內聯存取執行緒本地變數的函式。如果 LLVM 內聯的程式碼嘗試存取執行緒本地變數,則可能會崩潰或失敗,並顯示「Relocation type not implemented yet!」。請勿內聯此類程式碼。回溯修補至 LLVM 到達的 11 版。錯誤 #16696。作者:Dmitry Marakasov amdmi3@amdmi3.ru 審閱人:Andres Freund andres@anarazel.de 討論:https://postgr.es/m/16696-29d944a33801fbfe@postgresql.org https://git.postgresql.org/pg/commitdiff/0207d5fbebed7eb698a7e5f3adf30fafe95bc4b9
Amit Kapila 推送了
更新 AlterSubscription 的註解。新增說明為何需要停用訂閱才能允許 slot_name 為 none。作者:Japin Li 和 Amit Kapila 討論:https://postgr.es/m/MEYP282MB1669CBD98E721C77CA696499B61A9@MEYP282MB1669.AUSP282.PROD.OUTLOOK.COM https://git.postgresql.org/pg/commitdiff/dcecdfafbd2dbdfaa0f82e7710abfa65242a1d1e
不允許將 replication slot_name 設定為 ''。我們不允許透過 SQL API pg_create_logical_replication_slot() 將 replication slot_name 建立為空字串 (''),但允許透過 Alter Subscription 命令設定。這將導致應用程式工作進程重複嘗試透過 slot_name '' 串流資料,並且使用者不允許使用該名稱建立 slot。作者:Japin Li 審閱人:Ranier Vilela, Amit Kapila 回溯修補:10,這是引入它的版本。討論:https://postgr.es/m/MEYP282MB1669CBD98E721C77CA696499B61A9@MEYP282MB1669.AUSP282.PROD.OUTLOOK.COM https://git.postgresql.org/pg/commitdiff/29abde637bbb4b8fcdc96e049813890afa5ab671
修正 proto.c 中潛在的緩衝區溢位。防止使用 strcpy 複製到 gid 緩衝區時發生潛在的緩衝區溢位。這是由 commit a8fd13cab0 引入的。報告人:Tom Lane,根據 coverity。作者:Peter Smith 審閱人:Amit Kapila 討論:https://postgres.tw/message-id/161029.1626639923%40sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/01c3adcdd85f1507ef49bdf5430c59925d08de6f
Michaël Paquier 推送了
doc:提及 DROP STATISTICS 的 CASCADE/RESTRICT。此語法無效,因為統計資料上沒有任何相依性,但剖析器支援它。這與其他 DROP 命令更加一致。作者:Vignesh C 討論:https://postgr.es/m/CALDaNm1LA=yNmzcSfy+0oe6CEAgsxXRf_-UutE3ZncFi8QkFNQ@mail.gmail.com 回溯修補:10 https://git.postgresql.org/pg/commitdiff/d1216635610a9855a8ec139e55cd852f67d5ee81
修正 pg_receivewal --compress 的 WAL 區段開啟的一些問題。如果儲存這些檔案的儲存庫中存在具有相同基本名稱的部分非壓縮區段,則使用 --compress 時,處理新 WAL 區段開啟的邏輯會變得模糊。在這種情況下,使用 --compress 會導致程式碼首先檢查是否存在非壓縮區段及其大小,然後開啟新的壓縮部分區段。程式碼在大多數平台上意外地正常運作,正如建置伺服器所證明的那樣,除了 bowerbird,其中 gzflush() 可能在此程式碼路徑中失敗。在建立新的部分非壓縮區段時,採用填充前使用的程式碼路徑是錯誤的,因此讓我們修正它。請注意,當使用者混合使用有或沒有壓縮的 pg_receivewal 連續執行時,會出現此問題,正如 ffc9dda 引入的測試所發現的那樣。在它之上,這會重構程式碼,以便需要知道 ".gz" 字尾的程式碼路徑從 walmethods.c 中的四個減少到一個,從而稍微簡化了新壓縮方法的引入。這解決了第二個問題,即為意外失敗產生的記錄訊息不會顯示所涉及的壓縮區段名稱,這令人困惑,而是列印非壓縮等效項的名稱。報告人:Georgios Kokolatos 討論:https://postgr.es/m/YPDLz2x3o1aX2wRh@paquier.xyz 回溯修補:10 https://git.postgresql.org/pg/commitdiff/7fbe0c8c4d4fe429ee1d6383706ea5ccb0f639d3
重新啟用 Windows 上 pg_receivewal 的 ZLIB TAP 測試。這是還原 6cea447 的操作,該提交暫時停用了 Windows 上的這些測試,原因是 bowerbird 發生錯誤,導致 gzflush() 在新開啟的壓縮和部分區段上執行時會失敗。由於 7fbe0c8,這個問題現在應該已解決,所以讓我們看看 buildfarm 對於 Windows 上這些測試的說法。討論:https://postgr.es/m/YPDLz2x3o1aX2wRh@paquier.xyz https://git.postgresql.org/pg/commitdiff/91d395f47aa92849b2556b1a4d6bc1ff34121a30
停用 Windows 上 pg_receivewal 的 ZLIB TAP 測試。這是還原提交 91d395f,以避免在 Windows 上執行這些測試。這些測試在全球 buildfarm 成員中普遍穩定,除了 fairywren (pg_receivewal 崩潰) 和 bowerdird (SIGBREAK 阻止 buildfarm 執行完成)。這些錯誤相當奇怪,因為其他具有非常相似特徵的主機能夠順利運行這些測試。目前,停用 Windows 上的這些測試,以使 buildfarm 恢復正常。根據與 Andrew Dunstan 的討論。討論:https://postgr.es/m/9040d5ed-6462-66a4-07ac-2923785ae563@dunslane.net https://git.postgresql.org/pg/commitdiff/6a2c532c2230159b909382cfa58494ef9d6df703
統一命令列整數選項的解析邏輯。現在,命令列二進制檔案的大部分整數選項都使用能夠完成工作的單一例程,修復了對馬虎值的檢測問題,例如由 atoi() 引起的問題,atoi() 在以數字字元開頭且帶有垃圾尾隨字串的字串上會失敗。根據我的統計,此提交將需要翻譯的字串數量減少了 26 個,將程式碼切換為具有無效和超出範圍值的兩種錯誤類型。在這裡可以做更多的事情,包括浮點數甚至 int64 選項,但 int32 是最吸引人的情況,因為可以依靠 strtol() 來可靠地完成工作。請注意,目前有一些例外情況,例如 pg_ctl 或 pg_upgrade,它們使用自己的日誌記錄邏輯。一些負面的 TAP 測試需要對產生的新錯誤進行一些調整。pg_dump 和 pg_restore 在選項解析中追蹤了並行作業的最大數量。程式碼經過少量重構,以便在專用於並行的程式碼中追蹤它。作者:Kyotaro Horiguchi, Michael Paquier 審閱人:David Rowley, Álvaro Herrera 討論:https://postgr.es/m/CALj2ACXqdG9WhqVoJ9zYf-iZt7sgK7Szv5USs=he6NnWQ2ofTA@mail.gmail.com https://git.postgresql.org/pg/commitdiff/6f164e6d17616a157ea5d9e34dbb1b211c080c41
為 pg_basebackup 和 pg_{dump,restore} 新增遺失的標頭宣告。這修復了由 6f164e6 引起的兩個編譯失敗。有趣的是,在 Linux 甚至 Windows 中,缺少 <limits.h> 並不會失敗。但在 MacOS 上,它會失敗。根據多個 buildfarm 成員的說法。https://git.postgresql.org/pg/commitdiff/bc0cc68f8a1648029424e9300b2e4457acd474a6
Peter Eisentraut 推送
在適當的地方使用 l*_node()
系列函數。而不是 castNode(…, lfoo(…))。作者:Dagfinn Ilmari Mannsåker ilmari@ilmari.org 討論:https://postgres.tw/message-id/flat/87eecahraj.fsf@wibble.ilmari.org https://git.postgresql.org/pg/commitdiff/2b00db4fb0c7f02f000276bfadaab65a14059168
使 UCS_to_most.pl 按排序順序處理編碼。這只是使進度輸出更容易理解。審閱人:Kyotaro Horiguchi horikyota.ntt@gmail.com 審閱人:Heikki Linnakangas hlinnaka@iki.fi 討論:https://postgres.tw/message-id/flat/22016aa9-ca59-15c7-01df-f292cb558c4d@enterprisedb.com https://git.postgresql.org/pg/commitdiff/4d56115f721f3f2c6d3b6f017f40b5103ca71448
移除產生的 C 輸出中的一些空白。它不符合正常的編碼風格。審閱人:Kyotaro Horiguchi horikyota.ntt@gmail.com 審閱人:Heikki Linnakangas hlinnaka@iki.fi 討論:https://postgres.tw/message-id/flat/22016aa9-ca59-15c7-01df-f292cb558c4d@enterprisedb.com https://git.postgresql.org/pg/commitdiff/344dedfd1c24f2e2c591f1eadf8414a1f4df910a
更多關於 relkind 不符的錯誤訊息的改進。繼 2ed532ee8c474e9767e76e1f3251cc3a0224358c 之後,邏輯複製區域中的一些錯誤訊息目前僅處理表格,但如果我們預期處理更多 relkind(例如序列),那麼這些訊息也屬於先前修補程式影響的類別,因此也調整它們。審閱人:Michael Paquier michael@paquier.xyz 討論:https://postgres.tw/message-id/c9ba5c6a-4bd5-e12c-1b3c-edbcaedbf392@enterprisedb.com https://git.postgresql.org/pg/commitdiff/81d5995b4b78017ef9e5c6f151361d1fb949924c
重新命名 ExprState 的 NodeTag。為了與所有其他節點結構保持一致,將 tag 重新命名為 type。討論:https://postgres.tw/message-id/flat/c1097590-a6a4-486a-64b1-e1f9cc0533ce@enterprisedb.com https://git.postgresql.org/pg/commitdiff/d9a38c52cef3cf80c4259277f11d42a86ecb1952
重新命名 _outValue() 的引數。為了與類似的函數保持一致,將 value 重新命名為 node。討論:https://postgres.tw/message-id/flat/c1097590-a6a4-486a-64b1-e1f9cc0533ce@enterprisedb.com https://git.postgresql.org/pg/commitdiff/3d25b4ea6e2c93c60566c1185d4ee79a6285089a
為了保持一致性,重新命名一些節點支持函數。一些節點函數名稱與它們的節點類型名稱不完全匹配。修復這些以保持一致性。討論:https://postgres.tw/message-id/flat/c1097590-a6a4-486a-64b1-e1f9cc0533ce@enterprisedb.com https://git.postgresql.org/pg/commitdiff/31360381f0a5ff5193c3631e6076442352906f59
在節點中使用的枚舉中新增遺失的枚舉標籤。討論:https://postgres.tw/message-id/flat/c1097590-a6a4-486a-64b1-e1f9cc0533ce@enterprisedb.com https://git.postgresql.org/pg/commitdiff/983bdc4fac492a99bb8ab5a471ca7437139e5cf6
修復註解中的錯字。作者:Kyotaro Horiguchi horikyota.ntt@gmail.com 討論:https://postgres.tw/message-id/flat/20210716.170209.175434392011070182.horikyota.ntt%40gmail.com https://git.postgresql.org/pg/commitdiff/86a1aae764b03c7fe06e290e409c8d1a72ff187d
Álvaro Herrera 推送
使新的複寫槽測試程式碼甚至更不容易競爭。進一步修復 ead9e51e8236 中的測試程式碼,這次是等待檢查點完成後再繼續;這確保了當我們建立下一個槽時,WAL 區段的移除已經發生。作者:Kyotaro Horiguchi horikyota.ntt@gmail.com 討論:https://postgr.es/m/20210719.111318.2042379313472032754.horikyota.ntt@gmail.com https://git.postgresql.org/pg/commitdiff/0d2cb6b2bbc3327dd002f3ecd4d5bde5851b0cdc
稍微改進安裝說明。報告者:Daniel Westermann 討論:https://postgr.es/m/GV0P278MB04835AAEACF894617574EB6BD25A9@GV0P278MB0483.CHEP278.PROD.OUTLOOK.COM https://git.postgresql.org/pg/commitdiff/aaec237b1a2f368ed2a8794c4f48b3656750eabc
再次修改安裝說明。再三思考:提交 aaec237b1a2f 中新增的新措辭針對的是錯誤的受眾。刪除關於 git 的部分,只談論如何取得 tarball。尋找 git 儲存庫的人可以在附錄中查找。這需要擴展,但此提交沒有做到。順便一提,修復了先前提交中偷偷加入的幾個錯字。討論:https://postgr.es/m/713760.1626891263@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/73c5d2bfee2907b7f158485a531f00ba61b054f7
使 ALTER TRIGGER RENAME 指令對於分割表保持一致性。重新命名分割表上的觸發程序有兩個問題:首先,它不會遞迴地重新命名分割區上的觸發程序;其次,它無法禁止重新命名複製的觸發程序。在分割區中具有不同名稱的觸發程序毫無意義,而且 pg_dump 也不會保留分割區的名稱。未進行回溯修補 -- 在穩定版本中使 ALTER TRIGGER 拋出錯誤可能會導致現有腳本出現問題。協作者:Arne Roland A.Roland@index.de 協作者:Álvaro Herrera alvherre@alvh.no-ip.org 審閱者:Zhihong Yu zyu@yugabyte.com 討論:https://postgr.es/m/d0fd7040c2fb4de1a111b9d9ccc456b8@index.de https://git.postgresql.org/pg/commitdiff/80ba4bb383538a2ee846fece6a7b8da9518b6866
使新的測試不受定序影響。在捷克語環境中執行的 Animals 測試失敗。我可以嘗試尋找沒有這個問題的表名,但使用 C 語系似乎更簡單。根據 buildfarm:https://git.postgresql.org/pg/commitdiff/6beb38cfc9ddd4cd3d2eb5402981ebdd69a618b4
Peter Geoghegan 推送
vacuumdb:更正關於 --force-index-cleanup 的註解。Commit 3499df0d 添加了一條註解,錯誤地暗示 --force-index-cleanup 沒有與類似的 --no-index-cleanup 選項出現在同一個主要版本中。事實上,這兩個選項都是 PostgreSQL 14 的新增功能。回溯修補:14-,在這兩個選項被引入的地方。https://git.postgresql.org/pg/commitdiff/28766c054f8cc6a7bbcf99497954e7a259d3edb2
Doc: vacuum_multixact_failsafe_age 是基於 multixact 的。 Commit 1e55e7d1 中的疏忽,它向 VACUUM 添加了一個迴繞容錯機制。回溯修補:14-,在此引入了 VACUUM 容錯機制。https://git.postgresql.org/pg/commitdiff/dd498998a374b3d2a7f5211504f1f1aa15348cf1
Tom Lane 推送
修復 plpgsql 中邊緣情況下的未初始化變數問題。如果在我們最初嘗試檢查成功編譯的表達式是否為“simple”時引發了錯誤,則後續對 exec_stmt_execsql 的調用會假設 stmt->mod_stmt 已經被計算,但實際上並沒有。這可能會導致在除錯版本中出現斷言失敗;在生產版本中,其效果通常會表現得好像指定了 INTO STRICT,即使實際上沒有。當然,這只有在後續嘗試執行表達式成功時才有意義,因此只有透過修復某些被引用、可內聯的 SQL 函數中的失敗,然後在同一個會話中重試調用 plpgsql 函數,才能達到這個問題。(可能還有更模糊的方法可以在不更改 plpgsql 函數的情況下更改表達式的行為,但這似乎是人們在實踐中最有可能遇到的情況。)解決這個問題最萬無一失的方法是安排 exec_prepare_plan 在我們完成輔助的簡單表達式檢查之前不要設定 expr->plan。但似乎很難在不產生引用計數洩漏問題的情況下做到這一點。因此,在註解中記錄危險,並修復 exec_stmt_execsql 以單獨測試是否已計算 stmt->mod_stmt。(這會為每次執行增加一個測試和分支,但希望這在上下文中可以忽略不計。)在 v11 及更高版本中,還修復了 exec_stmt_call,它也存在相同的問題的變體。根據 Alexander Lakhin 提出的錯誤 #17113。回溯修補到所有受支援的分支。討論:https://postgr.es/m/17113-077605ce00e0e7ec@postgresql.org https://git.postgresql.org/pg/commitdiff/d9809bf8694c17e05537c5dd96cde3e67c02d52a
Doc:改進關於指數運算子的文件。既然我們不必將其塞入舊的運算子表格格式的束縛中,我們可以添加另一個範例來闡明關於從左到右結合性的觀點。根據來自 mdione at grulic.org.ar 的建議。https://postgr.es/m/162661954599.693.13700316547731859171@wrigleys.postgresql.org https://git.postgresql.org/pg/commitdiff/7fa1e1ef741964eeb50f33d7c72622658bb7e5f4
修復一些標頭無法“獨立”編譯的錯誤。最近添加的對 ParseState 的引用未被 #include 引用涵蓋,從而為這些標頭的使用者建立了不必要的排序依賴性。Commit 2bfb50b3d 中的疏忽。根據 headerscheck/cpluspluscheck。https://git.postgresql.org/pg/commitdiff/678f5448c2d86976a98b402ef14482a8ba3b159b
移除配置時的執行緒安全性檢查 (thread_test.c)。這個測試在撰寫時很有用,大約二十年前,但對於過去十幾年或更長時間內建構的任何平台來說,它似乎相當沒有意義。(另請參閱 8a2121185 中的註解。)而且我們現在收到報告,說這個測試程式本身在 ThreadSanitizer 下會失敗。與其花費精力修復它,不如直接刪除它,並假設仍然關心它的少數人已經知道他們需要使用 --disable-thread-safety。回溯修補到 v14 中,與 8a2121185 保持一致。討論:https://postgr.es/m/CADhDkKzPSiNvA3Hyq+wSR_icuPmazG0cFe=YnC3U-CFcYLc8Xw@mail.gmail.com https://git.postgresql.org/pg/commitdiff/76fa3db33654e543b5c796e28c6fc5b505a19c2a
使 printf("%s", NULL) 列印 "(null)" 而不是崩潰。 我們之前採取了一種強硬的態度,認為呼叫者永遠不應該列印一個空字串指標,這樣做應該會導致斷言失敗或崩潰。 但是,我們早就清除了任何容易找到的此類錯誤。 剩下的很多程式碼可能在難以觸及的邊緣情況下會以這種方式失敗。 例如,在像 ereport(ERROR, (errcode(ERRCODE_UNDEFINED_OBJECT), errmsg("constraint \"%s\" for table \"%s\" does not exist", conname, get_rel_name(relid)))); 這樣簡單的程式碼中,我們必須想知道是否完全保證 get_rel_name 在這種情況下不會傳回 NULL。 如果發生這種情況,現有的策略會將可能是一個非常小的錯誤轉換為伺服器崩潰的狀況。 這對穩健性不利。 因此,讓我們遵循 glibc 的引導,列印 "(null)" 而不是失敗。 如果在正常使用中可以達到這種行為,我們當然仍然認為這是一個錯誤; 但崩潰似乎不如不崩潰那麼理想。 此修復程式在 v12 及更高版本中全面有效,在這些版本中我們始終使用 src/port/snprintf.c。 在此之前,在大多數平台上,我們受制於本地 libc,但似乎 Solaris 10 是唯一仍然會導致崩潰的受支援平台。 大多數其他平台,例如 *BSD
、macOS 和 Solaris 11,都在某個時候採用了 glibc 的行為。 (AIX 和 HPUX 只列印 "" 而不是 "(null)",但這已經足夠接近了。)我沒有檢查 Windows 的原生 printf 會做什麼,但這並不重要,因為我們長期以來一直在該平台上使用 snprintf.c。 在 v12 及更高版本中,也對相關程式碼進行 const-ify,以便我們不會在常數字串上消除 const。 這只是一種整潔主義,因為幾乎沒有編譯器會警告這一點。 討論:https://postgr.es/m/17098-b960f3616c861f83@postgresql.org https://git.postgresql.org/pg/commitdiff/3779ac62d709467fe6331c8f0285d42e7487a01c
修正檢查會話層級與交易層級鎖定的衝突。我們有一個實作限制,`PREPARE TRANSACTION` 無法處理在同一個可鎖定物件上同時持有會話生命週期鎖定和交易生命週期鎖定的情況。(這是因為我們需要在 prepare 後的清理過程中取得一個新的 `PROCLOCK` 項目,而這個操作可能會失敗。這種情況只會在異常使用 advisory locks 時發生,所以移除這個限制可能不值得花費那麼多的精力。) `AtPrepare_Locks` 試圖強制執行這個限制,但它的邏輯非常不足,因為它只偵測到會話鎖定和交易鎖定具有相同鎖定模式的情況。在同一個物件上不同模式的鎖定會導致相當無用的訊息「PANIC: we seem to have dropped a bit somewhere」。為了修正,建立一個暫時的雜湊表,每個 locktag 對應一個條目,而不是每個 locktag + 模式對應一個條目,並使用它來偵測衝突。根據 Alexander Pyhalov 提出的 bug #17122。這個 bug 存在已久,所以 back-patch 到所有支援的分支。討論:https://postgr.es/m/17122-04f3c32098a62233@postgresql.org https://git.postgresql.org/pg/commitdiff/6310809c4aa146b3996a35524955c6c6943d241a
移除 Windows 上雜湊表大小的人為限制。引入 `hash_mem_multiplier` GUC 的目的是讓使用者重現雜湊聚合的舊行為,也就是在需要時可以使用超過 `work_mem` 的記憶體。然而,這個實作在 Win64 上未能完成這項工作,因為在該平台上,`work_mem` 被限制在 2GB,以保護使用 "long int" 計算記憶體大小的各種地方。如同撰寫的那樣,相同的限制也應用於 `hash_mem`。這導致需要超過 2GB 用於雜湊聚合的查詢出現嚴重的效能衰退,因為它們現在會溢出到磁碟,而且無法阻止這種情況發生。移除 `work_mem` 限制似乎是個好主意,但這是一個大工程,並且不可能進行 back-patch。然而,只有少數幾個地方需要關注 `hash_mem` 的值,而且事實證明可以在那裡移除限制,而不需要太多的程式碼變動或任何 ABI 破壞。所以,讓我們現在這樣做來修正效能衰退,並將更大的任務留到以後再處理。這個 patch 確實引入了更多的基礎設施,這些基礎設施應該有助於更大的任務,即 `pg_bitutils.h` 支援處理 `size_t` 值。根據 Laurent Hasson 的抱怨。Back-patch 到 v13,這是引入行為變更的版本。討論:https://postgr.es/m/997817.1627074924@sss.pgh.pa.us 討論:https://postgr.es/m/MN2PR15MB25601E80A9B6D1BA6F592B1985E39@MN2PR15MB2560.namprd15.prod.outlook.com https://git.postgresql.org/pg/commitdiff/28d936031a86d94806c6604480ff3f3f169b371c
Fujii Masao 推送
使 `XLOG_FPI_FOR_HINT` 記錄尊重 `full_page_writes` 設定。Commit 2c03216d83 變更了 `XLOG_FPI_FOR_HINT` 記錄,使其始終包含完整頁面映像,即使 `full_page_writes` 已停用。然而,在這種設定下,它們不需要這樣做,因為 hint bit 更新不需要受到 torn writes 的保護。因此,此 commit 使 `XLOG_FPI_FOR_HINT` 記錄尊重 `full_page_writes` 設定。也就是說,如果 `full_page_writes` 已停用,`XLOG_FPI_FOR_HINT` 記錄可能不包含任何完整頁面映像,並且對它們進行 WAL 重播不會做任何事情。報告人:Zhang Wenjie 作者:Kyotaro Horiguchi 審閱人:Fujii Masao 討論:https://postgr.es/m/tencent_60F11973A111EED97A8596FFECC4A91ED405@qq.com https://git.postgresql.org/pg/commitdiff/7fcf2faf9c7dd473208fd6d5565f88d7f733782b
文件:記錄只有超級使用者才能使用 `pg_import_system_collations()`。Back-patch 到 v10,這是新增 `pg_import_system_collations()` 的版本。作者:Atsushi Torikoshi 審閱人:Fujii Masao 討論:https://postgr.es/m/b7f484692a3e283710032e68b7f40617@oss.nttdata.com https://git.postgresql.org/pg/commitdiff/90b6c339b2b37ee320ff6125ef8c8ad0073aa31b
John Naylor 推送
在 euc_tw_and_big5.c 中新增遺失的 noError 參數檢查。ea1b99a66 中的疏忽 Yukun Wang Backpatch 到 v14,這是引入此參數的版本 討論:https://postgres.tw/message-id/flat/OS0PR01MB6003FCEFF0201EF21685FD33B4E39%40OS0PR01MB6003.jpnprd01.prod.outlook.com https://git.postgresql.org/pg/commitdiff/004874b72e8e60966f88de2d95667fe66c0466ca
在 postgres.conf.sample 中將 "B" 和 "us" 記錄為可接受的單位。在 postgresql.conf 中,記憶體和檔案大小 GUC 可以使用 "B" (bytes) 來指定,如 b06d8e58b 所示。同樣,時間 GUC 可以使用 "us" (microseconds) 來指定,如 caf626b2c 所示。更新 postgres.conf.sample 以反映這一事實。Pavel Luzanov Backpatch 到 v12,這是允許這兩個單位的最早版本。另一個 commit 將記錄 v11 的 "B" 案例。討論:https://postgres.tw/message-id/flat/f10d16fc-8fa0-1b3c-7371-cb3a35a13b7a%40postgrespro.ru https://git.postgresql.org/pg/commitdiff/bb95feabb8572f5069ad37763707862af5a81942
修正 date_bin 中的除以零錯誤。Bauyrzhan Sakhariyev,透過 Github Backpatch 到 v14 https://git.postgresql.org/pg/commitdiff/a0db4294aeffe428cdcb381fc66ba725ec588e95
David Rowley 推送
Andres Freund 推送
Dilip Kumar 發送了另一個版本的 patch,以新增 TOAST 壓縮方法選項。
Kyotaro HORIGUCHI 發送了另外兩個版本的 patch,以防止在恢復期間出現 xlog 頁面標頭錯誤。
Greg Nancarrow 發送了另一個版本的 patch,以新增新的 "client_connection" 事件和客戶端連線觸發器支援。
Jacob Champion 發送了另一個版本的 patch,以支援 NSS 作為 libpq TLS 後端。
Thomas Munro 發送了一個 patch,以支援 Solaris 上的直接 I/O。
Andres Freund 發送了兩個版本的 WIP patch,以透過將熱路徑與冷路徑分離來最佳化分配,並透過避免在分配新區塊時需要迭代所有區塊來提高 slab 效能。
Daniel Gustafsson 送出一個 patch,用於停用 pgcrypto 中 OpenSSL EVP 摘要填充 (digest padding),並為未載入 legacy 的 OpenSSL 3 添加替代輸出。
Ranier Vilela 送出了兩個版本的 patch,用於避免一些 strlen 呼叫。
Masahiko Sawada 送出了另外兩個版本的 patch,以將 errcontext 新增到應用邏輯複製變更時發生的錯誤中,新增 pg_stat_logical_replication_error 統計檢視,並向 ALTER SUBSCRIPTION 新增 skip_xid 選項。
Peter Smith 送出了另外兩個版本的 patch,以新增對串流交易的 prepare API 支援。
Dipesh Pandit 送出了另外兩個版本的 patch,透過維護目前正在封存的日誌段號碼並將其遞增 '1' 以取得下一個 WAL 檔案,而不是預設重新掃描目錄,來降低 WAL 封存程式的目錄掃描。
Andres Freund 和 Yura Sokolov 交換了 patch,以改善 Andres 針對 lazy vacuum 處理無效 tuple 儲存的方式,Andres 的 patch 透過新增 radix tree 實作,Yura 的 patch 則透過新增專用的 vacuum tid map。
Denis Hirn 送出了另一個版本的 patch,以允許 CTE 中存在多個線性遞迴自引用。
Peter Eisentraut 送出一個 patch,使 Unicode makefile 具有平行安全性。
Ronan Dunklau 送出了另一個版本的 patch,用於標記和移除為 SortGroupClause 新增的 resjunk,並教導排序和結果節點執行簡化版本的投影 (projection)。
Filip Gospodinov 送出了另一個版本的 patch,透過在 Libs.private 中硬式編碼 -lpgcommon 和 -lpgport 來修復靜態連結的 pkg-config 檔案。
Tomáš Vondra 送出了另一個版本的 patch,以實作序列的邏輯解碼/複製。
Tomáš Vondra 送出了另一個版本的 patch,以處理擴展統計資訊中的 Expr op Expr 子句。
Tomáš Vondra 送出了另外兩個版本的 patch,以提高 GROUP BY 的效率。
David Rowley 送出了另一個版本的 patch,使 nodeSort.c 對於單欄排序執行 Datum 排序。
Peifeng Qiu 送出了兩個版本的 patch,以將 kerberos delegation 支援新增到 libpq。
John Naylor 送出了另一個版本的 patch,以重寫 pg_verify_str 以提高速度。
Hou Zhijie 和 Greg Nancarrow 交換了 patch,以允許使用者宣告表的平行資料修改安全性,啟用平行 select for insert,並新增一個 pg_get_table_parallel_dml_safety(regclass) 函數,傳回 (objid, classid, parallel_safety) 的記錄。
Ranier Vilela 和 Aleksander Alekseev 交換了 patch,以取消隱藏幾個變數。
Simon Riggs 送出了另外兩個版本的 patch,以使 hash 索引能夠支援 UNIQUE 限制,並允許使用多欄 hash 索引。
Bruce Momjian 送出了另外四個版本的 patch,以修復分數間隔 (fractional intervals) 算術中的錯誤。
Yugo Nagata 送出一個 patch,以更正 libpq 文件中的錯誤,其中指出命令會本地儲存在輸出緩衝區中,直到它被刷新。
Yugo Nagata 送出了另一個版本的 patch,旨在修復一個錯誤,該錯誤表現為在 pgbench 的管道 (pipeline) 中使用準備好的 BEGIN 語句可能會導致錯誤。
Richard Guo 送出了另一個版本的 patch,以修復分區式 JOIN 中的一些不理想之處。
David Rowley 送出了另一個版本的 patch,以新增對 ORDER BY 聚合的規劃器支援。
Ronan Dunklau 和 Ranier Vilela 交換了 patch,以修正 postgres_fdw PathKey 的處理方式,方法是注意用於排序的運算子族。
Thomas Munro 送出了兩個版本的 patch,使 SIMD 程式碼更具平台中立性,新增對 UTF-8 驗證的 ARM/NEON 支援,並新增對 UTF-8 驗證的 POWER AltiVec 支援。
Dean Rasheed 送出了另一個版本的 patch,使負指數的指數運算能與 NUMERIC 配合使用。
Peter Eisentraut 送出一個 patch,以在 psql 中測試查詢取消。
Pavel Stěhule 和 Aleksander Alekseev 交換了 patch,以增強 PL/pgsql 偵錯 API,以新增傳回變數內容的文字值。
Vigneshwaran C 送出了另外兩個版本的 patch,以新增 PUBLICATION 的 schema 等級粒度。
Jacob Champion 送出一個 patch,以新增自 Unicode 5.0 以來新增的寬 Unicode 代碼點的指示符。
Thomas Munro 和 Soumyadeep Chakraborty 交換了 patch,透過將追蹤目標後端的方式從 pid 更改為使用 pgprocno 來最佳化 ProcSendSignal(),這不需要掃描 ProcArray。 這樣做還消除了在啟動期間需要檢查的一些特殊情況。
Andres Freund 送出一個針對 pgbench 的 patch,將管道化 (pipelining) 的使用限制為僅在必要時執行 PQconsumeInput()。
Nitin Jadhav 送出了另外兩個版本的 patch,以顯示啟動過程中執行的操作的進度。
Ajin Cherian 送出了另外四個版本的 patch,以從邏輯複製中刪除空交易。
Thomas Munro 送出一個 patch,以教導 pgindent 關於特殊檔案本地類型名稱。
Erik Rijkers 送出了另一個版本的 patch,以實作 SQL/JSON 規範的 JSON_TABLE 部分。
Alexander Pyhalov 送出了另一個版本的 patch,以使 CASE 運算式能夠被推送到外部伺服器。
Zeng Wenjing 送出了另一個版本的 patch,以實作全域臨時表。
Justin Pryzby 送出了另一個版本的 patch,以實作 ALTER TABLE ... ACCESS METHOD,並使能夠指定分區表的表存取方法。
Hou Zhijie 送出一個 patch,以新增 quickselect 功能,該功能可用於快速計算中位數等。
Artur Zakirov 送出一個 patch,旨在修復一個錯誤,該錯誤表現為邏輯複製觸發的儲存程序無法使用通知事件,方法是將 SignalBackends() 呼叫移動到 AtCommit_Notify() 中。
Peter Eisentraut 送出一個針對 pg_amcheck 的 patch,以修復命令列上的區塊編號剖析,以便正確處理 sizeof(long)==4 的系統。
Haiying Tang 送出一個 patch,以支援包含等號的單引號輸入的 Tab 鍵自動完成功能。
Fabien COELHO 送出了另一個版本的 patch,以新增 SHOW_ALL_RESULTS 選項到 psql。
Dean Rasheed 和 Tom Lane 交換了 patch,以允許 NUMERIC 具有負數比例。
Michael Banck 送出了另一個版本的 patch,以新增一個新的 PGC_ADMINSET GUC 上下文和一個新的 pg_change_role_settings 預定義角色。這些建立了一個管理員,其能力介於超級使用者和使用者之間。
Greg Nancarrow 送出了另一個版本的 patch,以修復平行工作程序失敗的 assertion 和 coredump。
Andrey Borodin 送出一個 patch,以避免在 relcache 和 syscache 回呼 (callbacks) 中出現重複。
Vigneshwaran C 送出了另一個版本的 patch,以包含邏輯複製訊息描述中使用的實際資料類型。
Robert Haas 送出一個 patch,以從 StartupXLOG() 中重構一些復原結束程式碼,延遲一些與允許 WAL 相關的復原結束操作,並建立一個具有 StartupXLOG() 中程式碼的 XLogAcceptWrites() 函數。
Andrey Borodin 送出了一個修補程式,以改善 ReadPageInternal() 的錯誤回報,確保不再出現「找不到記錄」這種無用的錯誤訊息。
Tom Lane 送出了一個修補程式,以移除雜湊表大小中與 "long int" 相關的限制。
Haiying Tang 送出了修補程式的另一個修訂版本,針對迴歸範例進行小修正。
Bharath Rupireddy 送出了修補程式的另一個修訂版本,以使用 WaitLatch 處理 {pre, post}_auth_delay。
Bharath Rupireddy 送出了修補程式的另一個修訂版本,以禁止 CREATE SEQUENCE 的 RESTART 選項。
Julien Rouhaud 送出了一個修補程式,使 pg_stat_statements 測試不受預備語句失效的影響。