恭喜新的 PostgreSQL 提交者 Daniel Gustafsson 和 John Naylor!
pg_dumpbinary 2.4 發布,這是一個用於以二進制格式轉儲 PostgreSQL 資料庫的程式。 https://github.com/lzlabs/pg_dumpbinary/releases/
https://archives.postgresql.org/pgsql-jobs/2021-07/
Planet PostgreSQL: https://planet.postgresql.org/
本週的 PostgreSQL 每週新聞由 David Fetter 帶給您
請在太平洋標準時間 (PST8PDT) 星期日下午 3:00 前將新聞和公告提交至 david@fetter.org。
Michaël Paquier 推送了
為 CREATE INDEX CONCURRENTLY 新增測試,使用非完全不可變的述詞。 83158f7 改善了 index_set_state_flags(),因此可以使用交易更新來更新 pg_index 狀態標誌,但實際上沒有一個測試案例直接強調它修復的可能性。此提交新增了這樣一個測試,使用外觀上有效的述詞,但呼叫了一個穩定的函數。作者:Andrey Lepikhov 討論:https://postgr.es/m/9b905019-5297-7372-0ad2-e1a4bb66a719@postgrespro.ru 向後移植:9.6 https://git.postgresql.org/pg/commitdiff/09a69f6e23369847cf11cd03c999a0342d47bbcc
修復使用 ALTER SUBSCRIPTION DROP PUBLICATION 的變數初始化。 copy_data 不是 ALTER SUBSCRIPTION 這個子指令的支援選項,這會導致與其相關的變數在解析 DefElems 中設定的選項後未被初始化。然後,重新整理可能會參考它。作者:Ranier Vilela 審閱者:Peter Smith 討論:https://postgr.es/m/CAEudQAp5P8nr=ze2Gv=BMj=DJFZnrvendZCZcC-fos3QiDe2sg@mail.gmail.com https://git.postgresql.org/pg/commitdiff/79718c1c6c007c27e9c1b8e92bd96d17067606fa
新增對 LZ4 的支援,用於 WAL 中完整頁面寫入的壓縮。 邏輯的實現方式是,在建立 WAL 記錄時可以選擇使用的壓縮方式,並且使用額外的每個記錄位來追蹤區塊是否使用 PGLZ、LZ4 或沒有壓縮。 現有的參數 wal_compression 已更改為一個枚舉,支援以下向後相容的值: - "off",預設值,不使用壓縮。 - "pglz" 或 "on",使用 PGLZ 壓縮 FPW。 - "lz4",新模式,使用 LZ4 壓縮 FPW。 基準測試表明,LZ4 輕鬆超越 PGLZ。 ZSTD 也會是一個有趣的選擇,但現在只使用 LZ4 可以使修補程式保持簡約,因為 toast 壓縮已經能夠使用 LZ4,因此無需擔心此實現的任何與構建相關的需求。 作者:Andrey Borodin, Justin Pryzby 審閱者:Dilip Kumar, Michael Paquier 討論:https://postgr.es/m/3037310D-ECB7-4BF1-AF20-01C10BB33A33@yandex-team.ru https://git.postgresql.org/pg/commitdiff/4035cd5d4eee4dae797bfc77ab07f8dcd8781b41
修復 xloginsert.c 中的編譯警告。 這可以使用至少 -O0 的 gcc 重新產生。 使用此未設定的變數無法達到驗證區塊壓縮的最後檢查,但讓我們保持整潔。 4035cd5 中的疏忽,每個 buildfarm 成員 lapwing。 https://git.postgresql.org/pg/commitdiff/47f514dd9a0022a04d321b627b2e991cb85396e2
針對與 FPW 壓縮相關的格式變更,增加 XLOG_PAGE_MAGIC。 4035cd5 中的疏忽,由 Tom Lane 發現。 討論:https://postgr.es/m/365778.1624941613@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/445e36ad4e14480a3c97d0f973a3532912424e85
最佳化 pg_checksums --enable,其中已設定校驗和。 如果計算出的校驗和與已儲存在讀取的區塊中的校驗和相符,此提交可防止 pg_checksums 重新編寫區塊。 這有助於在先前執行的工具中斷時加速工具的後續執行。 工具會追蹤並報告寫入的區塊和檔案數量,一旦完成。 請注意,即使沒有寫入區塊,也會發生資料夾的最終刷新,因為先前的中斷執行可能會在執行刷新時停止。 作者:Greg Sabino Mullane 審閱者:Paquier Michael, Julien Rouhaud 討論:https://postgr.es/m/CAKAnmmL+k6goxmVzQJB+0bAR0PN1sgo6GDUXJhyhUmVMze1QAw@mail.gmail.com https://git.postgresql.org/pg/commitdiff/4c9f50d116461617848601e97dbc6f122b0a6f14
修復交易 ROLLBACK PREPARED 的錯誤 PITR 訊息。 在此類交易上達到 PITR 會導致產生 LOG 訊息,其中提到已提交而非中止的交易。 4f1b890 中的疏忽。 作者:Simon Riggs 討論:https://postgr.es/m/CANbhV-GJ6KijeCgdOrxqMCQ+C8QiK657EMhCy4csjrPcEUFv_Q@mail.gmail.com 向後移植:9.6 https://git.postgresql.org/pg/commitdiff/17707c059cf4bf610e3b1833df5ca17cf223fe5f
簡化 jsonapi.c 對於前端的錯誤處理。 此提交移除了 src/common/ 的 JSON 解析常式中對中央日誌記錄功能的依賴性,這是為了在看到錯誤代碼與 JsonParseErrorType 中任何現有值不符時記錄錯誤,這是不應該發生的事情。 基於錯誤代碼提供詳細錯誤訊息的常式僅適用於後端,現有程式碼在前端使用是不安全的,因為錯誤訊息可能會以 palloc'd 結尾,或指向靜態字串,因此無法知道是否應該 pfree 訊息的記憶體。 前端中此常式的唯一使用者是 pg_verifybackup,已更改為在解析失敗時使用更通用的錯誤訊息。 請注意,如果用於共享函式庫,要使此程式碼更能適應 OOM 失敗,則需要做更多的工作,因為許多程式碼路徑仍然依賴於 palloc() & friends,但我們還不確定是否需要做到這一點。 儘管如此,移除對日誌記錄的依賴性是朝著更可移植性邁出的一步。 這清理了 check_stack_depth() 的處理,因為它僅存在於後端。 根據與 Jacob Champion 和 Tom Lane 的討論。 討論:https://postgr.es/m/YNwL7kXwn3Cckbd6@paquier.xyz https://git.postgresql.org/pg/commitdiff/b44669b2ca6a510b2c81cbe74c704d59226d729c
在真空截斷結束時使用 WaitLatch() 而不是 pg_usleep()。 即使等待時間相當有限,因為這裡只有 50 毫秒的超時,但這種做法的優點是在 postmaster 死亡時使程序更具響應性。 此變更的另一個優點是用於監控,因為我們為真空截斷結束獲得了一個新的等待事件。 作者:Bharath Rupireddy 審閱者:Aleksander Alekseev, Thomas Munro, Michael Paquier 討論:https://postgr.es/m/CALj2ACU4AdPCq6NLfcA-ZGwX7pPCK5FgEj-CAU0xCKzkASSy_A@mail.gmail.com https://git.postgresql.org/pg/commitdiff/70685385d70f8da73ab189a72f46311091ff09be
doc:在 TAP 測試的章節中提及 --enable-tap-tests 的需求。 作者:Greg Sabino Mullane 討論:https://postgr.es/m/CAKAnmmJYH2FBn_+Vwd2FD5SaKn8hjhAXOCHpZc6n4wXaUaW_SA@mail.gmail.com 向後移植:9.6 https://git.postgresql.org/pg/commitdiff/0f06359fb3622b289485306727300dd31f96fd9d
Thomas Munro 推送了
將 recovery_init_sync_method 變更為 PGC_SIGHUP。此設定除了啟動期間外沒有任何作用。但能夠動態變更它仍然不錯,對於在當叢集重新啟動不那麼吸引人時,在崩潰恢復後進行管理員來說,預計會非常有用。根據 commit 2941138e6 和 61752afb2 後的討論。作者:Justin Pryzby pryzby@telsasoft.com 審閱者:Fujii Masao masao.fujii@oss.nttdata.com 審閱者:Michael Paquier michael@paquier.xyz 審閱者:Thomas Munro thomas.munro@gmail.com 討論:https://postgr.es/m/20210529192321.GM2082%40telsasoft.com https://git.postgresql.org/pg/commitdiff/34a8b64b4e5f0cd818e5cc7f98846de57938ea57
移除一些無效的儲存。移除 commit 2fc7af5e966 遺留的冗餘本地變數賦值。作者:Quan Zongliang quanzongliang@yeah.net 審閱者:Jacob Champion pchampion@vmware.com 討論:https://postgr.es/m/de141d14-4fd6-3148-99bf-856b71aa948a%40yeah.net https://git.postgresql.org/pg/commitdiff/a2595e039c4745d82f361ea15d692cac114575cc
Amit Kapila 推送了
修正 TransactionGroupUpdateXidStatus() 中的競爭條件。當我們在提交時無法立即以獨佔模式取得 XactSLRULock 時,我們會將自己新增至需要更新其 XID 狀態的進程清單中。如果我們需要更新目前交易狀態的 clog 頁面與群組領導者的 clog 頁面相同,我們會這樣做,否則,我們允許呼叫者自行清除它。現在,當我們無法將自己新增至任何群組時,如果目前的 proc 已經成為某個群組的成員,我們不會清除目前的 proc,這會在目前的後端結束後,將相同的 proc 指派給另一個後端時導致斷言失敗。回報者:Alexander Lakhin 錯誤:17072 作者:Amit Kapila 測試者:Alexander Lakhin 回溯修補版本:11,在該版本中引入 討論:https://postgr.es/m/17072-2f8764857ef2c92a@postgresql.org https://git.postgresql.org/pg/commitdiff/b786304c2904a4e444fe740bbc2e0b69efacc19d
改善 RelationGetIdentityKeyBitmap()。我們過去使用 RelationGetIndexList() 來更新關聯的複製識別索引,但取而代之的是,我們可以直接使用 RelationGetReplicaIndex(),它使用相同的功能。這是一個小的程式碼可讀性改進。作者:Japin Li 審閱者:Takamichi Osumi, Amit Kapila 討論:https://postgr.es/m/4C99A862-69C8-431F-960A-81B1151F1B89@enterprisedb.com https://git.postgresql.org/pg/commitdiff/ee3fdb8f3465b3a5937a7fe647b7b6584a600647
允許透過複製協定啟用兩階段選項。擴展複製指令 CREATE_REPLICATION_SLOT 以支援 TWO_PHASE 選項。這將允許解碼諸如 PREPARE TRANSACTION、COMMIT PREPARED 和 ROLLBACK PREPARED 等指令,用於使用此選項建立的槽。交易的解碼發生在 prepare 指令時。此修補程式還透過一個新的選項 --two-phase 在 pg_recvlogical 中新增了對兩階段的支援。此選項也將被未來的修補程式使用,這些修補程式允許在 prepare 時間串流交易,以用於內建的邏輯複製。透過此功能,核心外的邏輯複製解決方案可以透過複製協定啟用兩階段交易的複製。作者:Ajin Cherian 審閱者:Jeff Davis, Vignesh C, Amit Kapila 討論:https://postgr.es/m/02DA5F5E-CECE-4D9C-8B4B-418077E2C010@postgrespro.ru https://postgr.es/m/64b9f783c6e125f18f88fbc0c0234e34e71d8639.camel@j-davis.com https://git.postgresql.org/pg/commitdiff/cda03cfed6b8bd5f64567bccbc9578fba035691e
允許在推測性中止後串流變更。到目前為止,我們不允許在邏輯複製中串流變更,直到我們收到推測性確認或推測性插入後的下一個 DML 變更記錄。原因是我們從未使用過處理推測性中止,但在 commit 4daa140a2f 之後,可以處理它們,因此我們可以在收到推測性插入後的推測性中止時允許串流。我們決定回溯修補到 14,其中引入了串流進行中交易的功能,因為這是一個小變更,並且使該功能更好。作者:Amit Kapila 審閱者:Dilip Kumar 回溯修補版本:14 討論:https://postgr.es/m/CAA4eK1KdqmTCtrBR6oFfGELrLLbDLDedL6zACcsUOQuTJBj1vw@mail.gmail.com https://git.postgresql.org/pg/commitdiff/52d26d560e272613c501e35b24fbf8d710de4b8a
替換 pg_stat_get_replication_slot() 中使用的魔術常數。一些變數一直在使用 10 作為魔術常數,而可以使用 PG_STAT_GET_REPLICATION_SLOT_COLS 來代替。作者:Masahiko Sawada 審閱者:Amit Kapila 回溯修補版本:14,在該版本中引入 討論:https://postgr.es/m/CAD21AoBvqODDfmD17DkEuPCvV2KbruukXQ2Vwrv5Xi-TsAsTJA@mail.gmail.com https://git.postgresql.org/pg/commitdiff/ab5e48f153cfea2c571dc177ae96faf4ab072b8e
Peter Eisentraut 推送了
訊息樣式改進。 https://git.postgresql.org/pg/commitdiff/c31833779d5a4775d7220be4b9143bec66c9a9fd
將索引 OID 巨集引數新增至 DECLARE_INDEX。與其明確定義諸如 AmOidIndexId 之類的符號,不如將它們作為 DECLARE_INDEX() 的引數包含在內,並讓 genbki.pl 產生來自 CATALOG() 宣告的表 OID 符號的方式。審閱者:John Naylor john.naylor@enterprisedb.com 討論:https://postgres.tw/message-id/flat/ccef1e46-a404-25b1-9b4c-85f2c08e1f28%40enterprisedb.com https://git.postgresql.org/pg/commitdiff/6a6389a08b228aa6bd21ced7a9c5151bf6f7f0a2
genbki 更嚴格的錯誤處理。與其僅針對無效的跨目錄查詢撰寫警告,不如計算錯誤並在最後報錯。審閱者:Tom Lane tgl@sss.pgh.pa.us 討論:https://postgres.tw/message-id/flat/ca8ee41d-241b-1bf3-71f0-aaf1add6d3c5%40enterprisedb.com https://git.postgresql.org/pg/commitdiff/735dc1a09469002fd659a4b1f5d582377b318977
為 UNBOUNDED 語法模糊性新增測試。SQL 標準中存在語法模糊性。由於 UNBOUNDED 是一個非保留字,因此它可以是函數參數的名稱並用作表達式。有一個語法技巧可以將此類案例解析為關鍵字。新增一些測試來記錄此行為。審閱者:Heikki Linnakangas hlinnaka@iki.fi 討論:https://postgres.tw/message-id/flat/b2a09a77-3c8f-7c68-c9b7-824054f87d98%40enterprisedb.com https://git.postgresql.org/pg/commitdiff/71ba45a3602da0bdbb518e16e3990cfcf21e5f73
doc:清理標題大小寫的使用。 https://git.postgresql.org/pg/commitdiff/c0fdc963704983ebd5908dc5acfb4d52303091a4
doc:移除不適當的 <acronym> 標籤。 https://git.postgresql.org/pg/commitdiff/1708f6b38aaf1b9375b5ca82792425410c98d441
適當的地方請使用 InvalidBucket 取代 -1。回報者:Ranier Vilela ranier.vf@gmail.com 討論:https://postgres.tw/message-id/flat/CAEudQAp%3DZwKjrP4L%2BCzqV7SmWiaQidPPRqj4tqdjDG4KBx5yrg%40mail.gmail.com https://git.postgresql.org/pg/commitdiff/6bd3ec62d9d7921fad2125bbeb5f2eafbbb261e5
Andrew Dunstan 推送了
執行 pgindent / pgperltidy 分支前置作業。 順便調整 src/include/utils/queryjumble.h,避免未使用的 typedef。 https://git.postgresql.org/pg/commitdiff/e1c1c30f635390b6a3ae4993e8cac213a33e6e3f
將 HEAD 標記為 15devel。 開始 hacking... https://git.postgresql.org/pg/commitdiff/596b5af1d3675b58d4018acd64217e2f627da3e4
修正 prove_installcheck 以在使用 PGXS 時使用正確的路徑。src/Makefile.global.in 中的 prove_installcheck 配方在使用 PGXS 時,會針對某些元素發出錯誤的路徑。 在這裡,我們為 PGXS 案例創建一個單獨的配方,以正確執行。 我們也藉此機會,將 prove_installcheck 和 prove_check 配方分成幾行,使檔案更易於閱讀,並移除 src/test/recovery/Makefile 的 REGRESS_SHLIB 設定,這是唯一需要它的測試集。 回溯修補至所有運作中的分支。 討論:https://postgr.es/m/f2401388-936b-f4ef-a07c-a0bcc49b3300@dunslane.net https://git.postgresql.org/pg/commitdiff/a0fc813266467d666b8f09ccccaccb700326a296
新增新的 make 目標 world-bin 和 install-world-bin。 這些分別與 world 和 install-world 相同,但不建置或安裝文件。 有很多理由想要能夠這樣做,包括速度、缺乏文件建置工具以及想要建置其他格式的文件。 簡化 buildfarm 客戶端程式碼的計畫包括使用這些目標。 回溯修補至所有運作中的分支。 討論:https://postgr.es/m/6a421136-d462-b043-a8eb-e75b2861f3df@dunslane.net https://git.postgresql.org/pg/commitdiff/b8c4261e5e8dc5c20d033970ec584991638ca041
從 commit b8c4261e5e 新增遺失的標籤。 https://git.postgresql.org/pg/commitdiff/7355c241ed002496d70882eccea6027726e2fb5a
Peter Geoghegan 推送了
將 pgindent commit 新增至 git-blame-ignore-revs 檔案。 新增最近的 commit e1c1c30f 的條目。 https://git.postgresql.org/pg/commitdiff/ba135fa537ab5c2fca0d589c826ebb3ecf98b2f1
改進 pgindent 發布工作流程。 更新 RELEASE_CHANGES 以引導讀者完成 pgindent README 中概述的步驟,無論是作為 beta 前任務還是作為啟動新開發週期時要執行的任務。 這使得有人在針對樹執行 pgindent 作為例行發布變更任務時,不太可能忘記更新 .git-blame-ignore-revs 檔案。 作者:Peter Geoghegan pg@bowt.ie 審閱者:Tom Lane tgl@sss.pgh.pa.us 討論:https://postgr.es/m/CAH2-Wz=2PjF4As8dWECArsXxLKganYmQ-s0UeGqHHbHhqDKqeA@mail.gmail.com https://git.postgresql.org/pg/commitdiff/bc49ab3c277b6b478bdad80c1ae36f926a33b4a6
Tom Lane 推送了
不要在 pgbench 的 random() 函數中依賴 -fwrapv 語意。 而是使用 common/int.h 函數以更符合 C 標準的方式檢查整數溢位。 這是由於最近在 buildfarm 成員 moonjelly 上的失敗,其中開發版本的 gcc 似乎在優化時沒有考慮 -fwrapv 參數。 據推測,這是一個 gcc 錯誤,很快就會修復,但我們最好在此處安裝更乾淨的程式碼,而不是等待。(這並沒有解決我們是否能夠擺脫使用 -fwrapv 的問題。測試表明,這個位置是唯一一個這樣做會產生可見回歸測試失敗的地方,但不幸的是,這證明不了什麼。) 回溯修補至 v12。 common/int.h 函數存在於 v11 中,但該分支沒有在任何客戶端程式碼中使用它們。 我判斷這種情況在現實世界中不夠有趣,即使承擔來自首次使用的微小風險。 Tom Lane 和 Fabien Coelho 討論:https://postgr.es/m/73927.1624815543@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/01697e92a460b10fde43707b29391c8deb69573e
不要在 libpq 的 fe-print.c 中使用 abort(3)。 在記憶體不足時導致核心轉儲似乎非常不友善,並且肯定遠遠超出了一般用途庫的預期行為。 只需列印錯誤訊息(就像我們已經做的那樣)並返回。 這些函數不幸地沒有錯誤返回慣例,但是使用它們的程式碼可能只是在尋找一種快速而骯髒的列印方法,而懶得檢查。 儘管這些函數已半棄用,但回溯修補此問題似乎仍然是合適的。 順便說一句,也回溯修補 b90e6cef1,只是為了減少分支之間的表面差異。 討論:https://postgr.es/m/3122443.1624735363@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/6f5d9bce57a7bb29ba61f0bf4fd465a26de9fc28
文件:RELEASE_CHANGES 程序筆記的進一步更新。 提及在建立或停用分支時,適當清單的電子郵件通知的期望。(多年來我一直在非正式地這樣做,但最好將其寫下來。) https://git.postgresql.org/pg/commitdiff/14b2ffaf7ffdd199937e8bcba8b459da5491bcb6
移除 libpq 對 abort(3) 的使用,以處理互斥鎖失敗的情況。 在開發版本中執行 abort() 似乎是可以的,但在通用庫的生產版本中則不然。 但是,執行此操作的函數缺乏將失敗報告回其呼叫者的任何方式。 似乎我們可以忽略生產版本中的失敗,因為 (a) 在程式碼存在 12 年的時間裡,沒有報告過此類失敗,並且 (b) 在 fe-auth.c 操作期間未能強制執行互斥鎖在大多數情況下可能不會引起任何問題。(使用此巨集的 OpenSSL 回呼已過時,因此更不可能引起有趣的問題。) 一個可能更好的答案是打破 pgthreadlock_t 回呼 API 的相容性,但在沒有現場問題報告的情況下,似乎真的不值得費心。 討論:https://postgr.es/m/3131385.1624746109@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/aaddf6ba09e25878e792f0d15f725370e19396df
新增一個建置時檢查,以確保 libpq 不會呼叫 exit() 或 abort()。 對於通用庫來說,直接退出或中止似乎不太好。 現在 libpq 自由地使用 src/common/ 中的位元,很容易意外地包含程式碼,這些程式碼會在 OOM 後執行一些不需要的操作,例如呼叫 exit(1) --- 例如 8ec00dc5c。 因此,新增一個簡單的交叉檢查,以確保沒有此類呼叫進入 libpq.so。 交叉檢查取決於 nm(1) 的可用性以及在共享函式庫上工作的能力,這可能並非在所有地方都成立。 但是,如果 nm 失敗,我們可以讓測試靜默地不執行任何操作。 只要檢查在通用平台上有效,就應該足夠了。(按照同樣的邏輯,我沒有擔心在 MSVC 建置中提供等效的測試。) 討論:https://postgr.es/m/3128896.1624742969@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/dc227eb82ea8bf6919cd81a182a084589ddce7f3
修正報告雜湊分割區衝突時的錯誤邏輯。 Commit efbfb6424 增加了邏輯,用於精確報告當新的雜湊分割區的模數與現有分割區不相容時,究竟是哪個現有分割區發生衝突。 然而,它誤解了分割區資料結構,在某些情況下會選擇錯誤的分割區,或者因為提取了錯誤的表格 OID 而直接崩潰。 根據 Alexander Lakhin 提出的錯誤 #17076。 由 Amit Langote 修正;我對程式碼註解做了一些進一步的工作。 討論:https://postgr.es/m/17076-89a16ae835d329b9@postgresql.org https://git.postgresql.org/pg/commitdiff/dd2364ced98553e0217bfe8f621cd4b0970db74a
修正 Commit dc227eb82 造成的移植性問題。 放棄在 libpq 中機械式地禁止 abort() 的嘗試。 即使原始碼中沒有這樣的呼叫,我們現在已經看到三種不同的情況,建置工具鏈會靜默地插入這樣的呼叫:gcc 在進行性能分析時會這樣做,某些平台使用它來實現 assert(),而 icc 這樣做沒有明顯的原因。 檢查是否意外使用了 exit() 似乎比檢查 abort() 重要得多,所以我們暫時只檢查 exit()。 此外,過濾掉 __cxa_atexit()
以避免錯誤匹配。 似乎 OpenBSD 會插入對它的呼叫,儘管 libpq 不包含任何 C++ 程式碼。 討論:https://postgr.es/m/3128896.1624742969@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/e45b0dfa1f1028948decad3abd3b0f6e913a44b0
改進 libpq 不呼叫 exit() 的建置時檢查。 對 Commit dc227eb82 的進一步修正。 根據 Peter Eisentraut 的建議,使用戳記檔 (stamp-file) 來控制檢查的運行時機,避免在 "make all" 期間重複執行。 此外,移除 nm 的 "-g" 參數:它沒有用處,並且某些版本的 nm 認為它與 "-u" 衝突。(感謝 Noah Misch 查明了這個移植性問題。)討論:https://postgr.es/m/3128896.1624742969@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/2f7bae2f924d8213a76370f825dc15eb0aa79796
為 initdb 新增 --clobber-cache 選項,用於 CCA 測試。 Commit 4656e3d66 將 "#define CLOBBER_CACHE_ALWAYS" 測試機制替換為 GUC,這對於以更有效的方式進行快取覆蓋測試非常有幫助;但實作中存在一個缺口。 在 initdb 執行期間進行快取覆蓋測試的唯一方法是使用 #define 的舊方法,因為無法從外部設定 GUC。 為此目的,透過為 initdb 新增一個參數來改進這一點。(也許有一天我們應該讓 initdb 傳遞任意的 "-c NAME=VALUE" 參數。 引用困難阻止了我現在嘗試這樣做。) 向 v14 回溯修補,4656e3d66 出現在 v14 中。 討論:https://postgr.es/m/1582507.1624227029@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/b741f4c3ee67666aa333dbb25bd71906b3474def
不要嘗試在 slot_store_error_callback() 中列印資料類型名稱。 現有的程式碼試圖在已經失敗的事務中進行 syscache 查找,這至少可以說是有問題的。 在考慮了一些替代方案後,最好的解決方案似乎是完全從錯誤訊息中刪除類型名稱。 表格和欄位名稱似乎足以進行本地化。 如果使用者不確定涉及哪些類型,她可以檢查本地和遠端表格定義。 完成此操作後,我們也可以丟棄 LogicalRepTypMap 雜湊表,該雜湊表沒有其他用途。 可以說,LOGICAL_REP_MSG_TYPE 複製訊息現在也已過時; 但我們應該保留它們,以防出現其他用途。(從複製協定中刪除某些東西的複雜性可能會超過任何節省。) Masahiko Sawada 和 Bharath Rupireddy,根據 Andres Freund 的投訴。 回溯修補到 v10,此程式碼源自 v10。 討論:https://postgr.es/m/20210106020229.ne5xnuu6wlondjpe@alap3.anarazel.de https://git.postgresql.org/pg/commitdiff/50371df266d4c8f4faaf448cbd789d9697443952
進一步限制 libpq 中無 exit() 測試的範圍。 在 --enable-coverage 建置中完全停用此檢查,因為較新版本的 gcc 也會為此插入 exit() 以及 abort() 呼叫。 此外,在 AIX 和 Solaris 上停用它,因為這些平台傾向於將 libldap 等功能作為靜態程式庫提供,然後將其包含在 libpq 的 shlib 中。 我們不能期望這些程式庫遵守我們的編碼規則。(該平台清單可能需要額外的調整,但我認為這足以讓 buildfarm 滿意。) 根據 Jacob Champion 和 Noah Misch 的報告。 討論:https://postgr.es/m/3128896.1624742969@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/792259591c0fc19c42247fc7668b1064d1e850d4
Noah Misch 推送了
移除 XLogFileInit() 跳過 ControlFileLock 的能力。 冷路徑、initdb 和復原結束使用了它。 不要優化它們。 討論:https://postgr.es/m/20210202151416.GB3304930@rfd.leadboat.com https://git.postgresql.org/pg/commitdiff/c53c6b98d38a4d238b2fe2ddcea63c33b0a61376
在 XLogFileInit() 中,修正 *use_existent
後置條件以適合呼叫者。 不常發生的是,不匹配導致 log_checkpoints 訊息和 TRACE_POSTGRESQL_CHECKPOINT_DONE() 見證 "added" 計數過高一個。 由於後果如此輕微,因此沒有回溯修補。 討論:https://postgr.es/m/20210202151416.GB3304930@rfd.leadboat.com https://git.postgresql.org/pg/commitdiff/85656bc3050f0846f53de95768b0f9f9df410560
傾印 public 結構描述擁有權和安全性標籤。 作為副作用,這修正了在 DBA 刪除並重新建立該結構描述的資料庫中傾印 public 結構描述 ACL 的問題。 由 Asif Rehman 審閱。 討論:https://postgr.es/m/20201229134924.GA1431748@rfd.leadboat.com https://git.postgresql.org/pg/commitdiff/a7a7be1f2fa6b9f0f48e69f12256d8f588af729b
傾印 COMMENT ON SCHEMA public。 與我們對 public 結構描述的其他屬性所做的一樣,當其有效負載與 initdb 已安裝的內容相符時,省略 COMMENT 命令。 對於確實攜帶此新 COMMENT 命令的傾印,還原它們的非超級使用者可能會收到錯誤。 由 Asif Rehman 審閱。 討論:https://postgr.es/m/ab48a34c-60f6-e388-502a-3e5fe46a2dae@postgresfriends.org https://git.postgresql.org/pg/commitdiff/7ac10f692054e2690aa6f80efdd98bd283c94b10
不要在 PreallocXlogFiles() 競爭條件下產生 ERROR。 在 restartpoint 完成 PreallocXlogFiles() 之前,啟動程序 KeepFileRestoredFromArchive() 呼叫可能會取消連結預先分配的區段。 如果 CHECKPOINT sql 命令引出了遇到競爭條件的 restartpoint,則該 sql 命令會失敗。 此外,restartpoint 省略了其 log_checkpoints 訊息和一些非必要的資源回收。 透過跳過區段的 open() 來防止 ERROR。 由於這些後果如此輕微,因此沒有回溯修補。 討論:https://postgr.es/m/20210202151416.GB3304930@rfd.leadboat.com https://git.postgresql.org/pg/commitdiff/2b3e4672f7602a6bb46a0735a1b41b635508b290
在封存復原期間跳過 WAL 回收和預先分配。 前一個 commit 解決了 InstallXLogFileSegment() 和 KeepFileRestoredFromArchive() 之間競爭條件的主要後果。 修正三個較小的後果。 仍然可能出現虛假的 durable_rename_excl() LOG 訊息。 KeepFileRestoredFromArchive() 浪費了 WAL 回收和預先分配的收益。 最後,XLogFileInitInternal() 可能會傳回 KeepFileRestoredFromArchive() 已取消連結的檔案的描述元。 這感覺像是未來錯誤的根源。 討論:https://postgr.es/m/20210202151416.GB3304930@rfd.leadboat.com https://git.postgresql.org/pg/commitdiff/cc2c7d65fc27e877c9f407587b0b92d46cd6dd16
移除 XLogFileInit() 取消連結先前存在檔案的能力。 只有 initdb 使用它。 initdb 拒絕在非空目錄上運行,並且通常無法處理其他種類的先前存在的檔案。 因此,利用這個機會進行簡化。 討論:https://postgr.es/m/20210202151416.GB3304930@rfd.leadboat.com https://git.postgresql.org/pg/commitdiff/421484f79c0b80209fa766eb00dbc2453a753273
移除 Perl \Q ... \E 中的反斜線字面值。此行為在 Perl 5.8.9 之後的某個時間點發生了變化,並且 "man perlre" 聲稱它「可能導致令人困惑的結果」。根據 buildfarm 成員 gaur 回報。此修復還原了 commit a7a7be1f2fa6b9f0f48e69f12256d8f588af729b。討論:https://postgr.es/m/20210629053627.GA2061079@rfd.leadboat.com https://git.postgresql.org/pg/commitdiff/48cb244fb9aca1620e35a14617ca5869b3ea065a
Álvaro Herrera 推送了
新增 PQsendFlushRequest 到 libpq。這個新的 libpq 函數允許應用程式傳送一個 'H' 訊息,指示伺服器刷新其傳出緩衝區。到目前為止還不需要這個功能,因為 Sync 訊息已經要求一個緩衝區;而且我沒有意識到在管線模式下需要這個功能,因為 PQpipelineSync 也會導致緩衝區被刷新。然而,有時在不建立同步點的情況下請求刷新是有用的。回溯修補到 14,這是 libpq 中引入管線模式的版本。回報者:Boris Kolpackov boris@codesynthesis.com 作者:Álvaro Herrera alvherre@alvh.no-ip.org 討論:https://postgr.es/m/202106252350.t76x73nt643j@alvherre.pgsql https://git.postgresql.org/pg/commitdiff/a7192326c74da417d024a189da4d33c1bf1b40b6
修正 libpq 在管線模式下的狀態機。原始程式碼要求在第一次呼叫 PQgetResult 之前呼叫 PQpipelineSync,否則將導致返回意外的 NULL 結果。透過在發送查詢時設定正確的狀態來修正,而不是保持不變,並讓 PQpipelineSync 應用必要的狀態更改。新增了一個新的測試案例來驗證該行為,該案例依賴於 commit a7192326c74d 新增的 PQsendFlushRequest() 函數。回溯修補到 14,這是新增管線模式的版本。回報者:Boris Kolpackov boris@codesynthesis.com 作者:Álvaro Herrera alvherre@alvh.no-ip.org 討論:https://postgr.es/m/boris.20210616110321@codesynthesis.com https://git.postgresql.org/pg/commitdiff/b71a9cb31e46b08aeac35a4355936165648b3c49
不要在 ANALYZE 時重設分割資料表的 relhasindex。Commit 0e69f705cc1a 引入了分析分割資料表的程式碼;但是,該程式碼無法正確保留 pg_class.relhasindex。透過觀察是否存在任何索引來修正,而不是意外地認為沒有索引。回溯修補到 14。作者:Alexander Pyhalov a.pyhalov@postgrespro.ru 審閱者:Álvaro Herrera alvherre@alvh.no-ip.org 審閱者:Zhihong Yu zyu@yugabyte.com 討論:https://postgr.es/m/CALNJ-vS1R3Qoe5t4tbzxrkpBtzRbPq1dDcW4RmA_a+oqweF30w@mail.gmail.com https://git.postgresql.org/pg/commitdiff/d700518d744e53994fdded14b23ebc15b031b0dd
Alexander Korotkov 推送了
Fujii Masao 推送了
doc: 為 postgres_fdw 參數新增類型資訊。作者:Shinya Kato 審閱者:Fujii Masao 討論:https://postgr.es/m/TYAPR01MB2896DEB25C3B0D57F6139768C40F9@TYAPR01MB2896.jpnprd01.prod.outlook.com https://git.postgresql.org/pg/commitdiff/61d599ede7424d88bbd4006b968bae366b6b9f5d
doc: 改善 pg_stat_database 中 tup_returned 和 tup_fetched 的描述。先前 pg_stat_database 檢視中 tup_returned 和 tup_fetched 欄位的描述令人困惑。此 commit 對其進行改進,以便更準確地表示這些欄位的以下公式。 * pg_stat_database.tup_returned = sum(pg_stat_all_tables.seq_tup_read) + sum(pg_stat_all_indexes.idx_tup_read) * pg_stat_database.tup_fetched = sum(pg_stat_all_tables.idx_tup_fetch) 在這些公式中,請注意,某些系統目錄(例如跨叢集所有資料庫共用的 pg_database)的計數器已從 sum 的計算中排除。作者:Masahiro Ikeda 審閱者:Fujii Masao 討論:https://postgr.es/m/9eeeccdb-5dd7-90f9-2807-a4b5d2b76ca3@oss.nttdata.com https://git.postgresql.org/pg/commitdiff/3465c8a8692fb628bc2710fbeedb9aeb534b0400
David Rowley 推送了
改善了多個使緩衝區大小翻倍的位置。有幾個地方正在執行一個緊密的迴圈,以確定大於或
= 所需記憶體的第一個 2 的冪數。我們可以改用 pg_nextpower2_32 或 pg_nextpower2_64,而不是使用迴圈。當我們需要一個等於或大於給定數量的 2 的冪時,我們只需將該數量傳遞給 nextpower2 函數。當我們需要一個大於該數量的 2 的冪時,我們只需傳遞該數量 + 1。此外,在 tsearch 中,有幾個位置在簡單的 "if" 可以完成時執行了一個 while 迴圈。在這兩個位置都只添加了 1 個項目,因此迴圈只能迭代一次。將迴圈更改為 if 語句使程式碼稍微更最佳化,因為條件檢查一次而不是兩次。還有相當多的剩餘位置以以下形式增加緩衝區的大小:while (reqsize >= buflen) { buflen
*=
2; buf = repalloc(buf, buflen); } 此 commit 未觸及這些位置。repalloc 將針對大於 MaxAllocSize 的大小產生錯誤。將這些位置更改為使用 pg_nextpower2_32 將消除引發該錯誤的可能性。從程式碼中不清楚大小是否會變得那麼大,因此謹慎起見。討論:https://postgr.es/m/CAApHDvp=tns7RL4PH0ZR0M+M-YFLquK7218x=0B_zO+DbOma+w@mail.gmail.com 審閱者:Zhihong Yu https://git.postgresql.org/pg/commitdiff/3788c66788e9f8c6904c6fe903724c1f44812c4d
清除執行器中的一些聚合程式碼。在這裡,我們更改了呼叫 build_pertrans_for_aggref() 的程式碼,以便該函數不再需要特殊處理它是否正在處理 aggtransfn 或 aggcombinefn。這允許我們重複使用 build_aggregate_transfn_expr() 函數,並完全擺脫 build_aggregate_combinefn_expr()。build_pertrans_for_aggref() 中所有特殊情況程式碼都已移至呼叫函數。這節省了 nodeAgg.c 中大約十二行程式碼和 parse_agg.c 中更多的幾十行程式碼。此外,重新命名 nodeAgg.c 中的幾個變數,以更清楚地表明我們正在使用 aggtransfn 或 aggcombinefn。一些舊名稱會讓你相信我們一直在使用 aggtransfn。討論:https://postgr.es/m/CAApHDvptMQ9FmF0D67zC_w88yVnoNVR2+kkOQGUrCmdxWxLULQ@mail.gmail.com https://git.postgresql.org/pg/commitdiff/63b1af94375cc2be06a5d6a932db24cd8e9f45e9
Doc: 提及 VACUUM 無法利用超過 1GB 的 RAM。記錄將 maintenance_work_mem 設定為超過 1GB 的值對 VACUUM 沒有影響。回報者:Martín Marqués 作者:Laurenz Albe 討論:https://postgr.es/m/CABeG9LsZ2ozUMcqtqWu_-GiFKB17ih3p8wBHXcpfnHqhCnsc7A%40mail.gmail.com 回溯修補到:9.6,最舊的支援版本 https://git.postgresql.org/pg/commitdiff/ec34040af104a1d25233eccd5715863ace6cbb10
Heikki Linnakangas 推送了
Bruce Momjian 推送了
docs: 釐清 multi-xacts 的新型激進 vacuum 模式。回報者:eric.mutta@gmail.com 討論:https://postgr.es/m/162395467510.686.11947486273299446208@wrigleys.postgresql.org 回溯修補到:14 https://git.postgresql.org/pg/commitdiff/c552e171d16e461c7af60cfe1a891c87be9cbbbf
文件:調整 "cities" 範例,使其與其他 SQL 保持一致。回報者:tom@crystae.net 討論:https://postgr.es/m/162345756191.14472.9754568432103008703@wrigleys.postgresql.org 向後移植至:9.6 https://git.postgresql.org/pg/commitdiff/d390bb62a6332f8a913c2c2021d56d6dba5a1dce
Anna Akenteva 送出了另一個修訂版的補丁,用於在 CLUSTER/VACUUM FULL 期間寫入可見性地圖。
Julien Rouhaud 送出了另一個修訂版的補丁,用於公開 get_query_def()。
Arne Roland 送出了另一個修訂版的補丁,用於重新命名分割資料表的觸發器。
Peter Eisentraut 送出了一個補丁,用於移除多餘的初始化。
Andrew Dunstan 送出了一個補丁,用於清理 PostgresNode.pm。
Masahiko Sawada 送出了一個補丁,用於新增 ALTER SUBSCRIPTION SET SKIP TRANSACTION,將錯誤上下文新增到應用邏輯複製變更的錯誤中,並新增 pg_stat_logical_replication_error 統計視圖。
Bharath Rupireddy、Amit Kapila 和 Álvaro Herrera 交換了補丁,以重構函數 parse_subscription_options。不要在 parse_subscription_options 函數簽名中使用多個參數,而是使用結構 SubOpts 來封裝所有訂閱選項及其值。這對於未來需要新增訂閱中的其他選項的工作很有用。此外,使用位圖來傳遞支援的選項並檢索指定的選項。
Jeff Davis 送出了一個補丁,用於新增一個 synchronous_replication_interrupt GUC。
Daniel Gustafsson 送出了兩個修訂版的補丁,用於修復 pg_basebackup 和 pg_dump 中 sscanf 的限制,並修復 TOC 檔案錯誤訊息列印中的錯誤,方法是取消隱藏變數名稱。
Dean Rasheed 送出了三個修訂版的補丁,旨在修復一個表現為 NUMERICs 乘法中的溢位的錯誤。
Michaël Paquier 送出了另一個修訂版的補丁,用於新增 wal_compression=zstd。
Magnus Hagander 又送出了兩個修訂版的補丁,用於新增 PROXY 協定支援。
Peter Eisentraut 送出了另一個修訂版的補丁,用於讓 psql 顯示多個結果集,而不是靜默地丟棄除了第一個之外的所有結果集,並使其可以從程序返回動態結果集。
Ranier Vilela 送出了一個補丁,用於防止在 src/backend/executor/nodeAgg.c 中選擇無效的分割區數量。
Aleksey Kondratov 送出了一個補丁,用於允許將 restore_command 作為 pg_rewind 的命令列選項提供。
David Christensen 送出了一個補丁,用於擴展大小的可能單位,並重構 pg_size_pretty 和 pg_size_bytes 以允許支援單位擴展。
Andrey V. Lepikhov 送出了一個補丁,用於向 pg_regress 新增 '--ignore-errors' 選項。
Jacob Champion 送出了另一個修訂版的補丁,用於重構 sslfiles Makefile 目標。
Josef Šimánek 送出了兩個修訂版的補丁,用於防止 BRIN 索引更新阻止 HOT 更新。
Michaël Paquier 送出了另一個修訂版的補丁,用於在已經設定校驗和的情況下加速 pg_checksums。
Anastasia Lubennikova 和 Yura Sokolov 交換了補丁,以通過新的掛鉤 smgr_hook、smgr_init_hook 和 smgr_shutdown_hook 使 smgr API 可擴展。
John Naylor 和 Heikki Linnakangas 交換了補丁,以重寫 pg_utf8_verifystr() 以提高速度。
Dean Rasheed 送出了一個補丁,使 numeric x^y 適用於負數 x。
Georgios Kokolatos 送出了一個補丁,教導 pg_receivewal 使用 lz4 壓縮。
Dean Rasheed 送出了兩個修訂版的補丁,以放寬對數值刻度的約束,例如允許 NUMERIC(3,-3),它將值四捨五入到最接近的千位數並保持高達 999000 的值,或者 NUMERIC(3,6),它可以保持高達 0.000999 的“微”量。
Thomas Munro 和 John Naylor 交換了補丁,以加速常見類型的元組排序。
Masahiko Sawada 送出了另一個修訂版的補丁,使其可以擁有涉及多個 postgres 外部伺服器的事務。
Andrey V. Lepikhov 送出了一個補丁,用於在初始執行階段選擇異步附加子計劃。
Takashi Menjo 送出了另一個修訂版的補丁,用於將 WAL 段檔案映射到 PMEM 上作為 WAL 緩衝區。
Yugo Nagata 又送出了兩個修訂版的補丁,用於修復 pgbench 中的 conn_duration。
Simon Riggs 送出了一個補丁,用於增強 PITR 中的 getRecordTimestamp() 以包含包含時間的所有記錄類型,新增對檢查點、恢復結束和準備好的 xact 記錄類型的處理,並允許 recovery_target_use_origin_time = off (預設) | on 選項。
Vigneshwaran C 送出了另一個修訂版的補丁,以確保錯誤訊息包含冗餘選項錯誤的提示訊息。
Vigneshwaran C 送出了另一個修訂版的補丁,用於在 CREATE/ALTER SUBSCRIPTION 期間識別發布者的遺漏發布。
Álvaro Herrera 送出了一個補丁,用於闡明 Perl 的 system() 失敗時的錯誤訊息。
Antonin Houska 送出了另一個修訂版的補丁,用於使用 undo logs 清理孤立檔案。
Jacob Champion 送出了另一個修訂版的補丁,用於將通用的 SASL 框架從 SCRAM 代碼中拉出來。
David Rowley 送出了一個補丁,用於記錄非修剪分割區的 Bitmapset。
Fabien COELHO 又送出了三個修訂版的補丁,用於修復 pgbench 記錄中的一個錯誤,該錯誤是由於最近對時間邏輯的一些變更引起的。
David Christensen 和 Fabien COELHO 交換了補丁,以向 pgbench 新增 multiconnect 選項。
Bharath Rupireddy 又送出了兩個修訂版的補丁,以收緊 postgres_fdw 中 batch_size、fetch_size 選項,防止其出現非數值。
Rahila Syed 送出了一個補丁,用於向邏輯複製新增欄位過濾。
Mark Dilger 又送出了兩個修訂版的補丁,用於為每個管理邏輯複製、主機安全性操作、網路安全性操作和資料庫操作新增預設角色,並允許非超級使用者使用 SET 和 ALTER SYSTEM SET。
Yugo Nagata 送出了另一個修訂版的補丁,旨在修復一個表現為 pgbench 序列化和死鎖錯誤的錯誤。
Amit Langote 送出了一個補丁,用於顯式追蹤關係的 RT 索引以檢查權限。
Richard Guo 又送出了兩個修訂版的補丁,用於將每個 rel 用作反聯接的外部和內部。
Vigneshwaran C 送出了另一個修訂版的補丁,用於新增 PUBLICATION 的架構層級支援。
Paul A Jungwirth 又送出了三個修訂版的補丁,用於實作 SQL 標準應用程式時間。
Gurjeet Singh 送出了一個補丁,用於新增頂層事務 ID 的自動通知。
David Rowley 送出了一個補丁,允許一些視窗函數提前完成執行。
Greg Smith 送出了一個補丁,用於改進 INSERT 工作負載、FK 索引和填充項領域中的一些 pgbench 工作負載。
Euler Taveira de Oliveira 送出了另一個修訂版的補丁,用於新增與 SSL/TLS 相關的縮寫 MITM 和 SNI,並將 SSL 的用法更改為更現代和通用的 SSL/TLS。
Kyotaro HORIGUCHI 送出了兩個修訂版的補丁,用於修復一個錯誤,該錯誤表現為 ECPG 預編譯 CREATE AS EXECUTE 到一個無法編譯的 C 語句,方法是避免接觸解析樹結構並使用 ExecuteStmt.type 來通知返回的字串是語句名稱還是完整語句。
Euler Taveira de Oliveira 和 Peter Smith 交換了補丁,以實作邏輯複製的列過濾。
Ranier Vilela 送出了一個補丁,用於修復 src/backend/utils/mmgr/freepage.c 中未初始化變數的存取。
Fabien COELHO 送出了 rand48 替換為更佳 PRNG 的 patch 的第五版修訂版。
Haotian Wu 送出了另一個修訂版的 patch,以在 pg_dump/restore 中新增 --drop-cascade 選項。
Pavel Stěhule 送出了另一個修訂版的 patch,以實作 schema 變數。
Hayato Kuroda 送出了另一個修訂版的 patch,以修正 ECPG 中 DECLARE STATEMENT、DEALLOCATE 和 DESCRIBE 中的錯誤。
Justin Pryzby 送出了另一個修訂版的 patch,使 pg_ls_*
顯示目錄和共享檔案集。
Fabien COELHO 送出了另一個修訂版的 patch,將 psql 的 echo 程式碼分解出來。
Vigneshwaran C 送出了一個 patch,藉由為 schema 變更新增回呼,以確保邏輯複製關聯在 schema 變更時獲得所需的快取失效。
Tom Lane 送出了 conversion_error_calls 中避免目錄存取的 patch 的另外兩個修訂版。
Tom Lane 送出了另一個修訂版的 patch,以移除 64k rangetable 限制。
Andy Fan 送出了一個 patch,為 RelOptInfo 新增 not null attrs。
Peter Eisentraut 送出了一個 patch,為了與 OpenSSL 3.0 相容,使用了 EVP_EncryptFinal_ex() 和 EVP_DecryptFinal_ex()。
Gilles Darold 送出了另一個修訂版的 patch,以在 XactCommand 層級新增 hooks。
Zhihong Yu 送出了一個 patch,以移除 check_safe_enum_use 中對進行中交易的多餘檢查。
Tatsuo Ishii 送出了另一個修訂版的 patch,以在 pgbench 中使用 COPY FREEZE。
David Rowley 送出了一個 patch,以更好地記錄附加和移除分割區時的鎖定行為。