pg-wrapper 1.0.0,PHP 的 pgsql 擴充功能的包裝器,已發布。
JDBC 42.2.23 已發布 https://jdbc.postgresql.org/documentation/changelog.html#version_42.2.23
Ora2Pg 22.1,一個用於將 Oracle 數據庫遷移到 PostgreSQL 的工具,已發布。 https://github.com/darold/ora2pg/blob/master/changelog
credcheck 0.1.1,一種用於純文本密碼的密碼檢查機制,已發布
pg_builder 1.0.0,一個用於 PostgreSQL 的 PHP 查詢構建器,已發布。
PG-Strom 3.0,一個使用 GPU 和相關硬件來加速 OLAP 查詢的 PostgreSQL 擴充功能,已發布。
Datasentinel Version 2021.05,一個監控和報告(除其他外)PostgreSQL 的應用程式,已發布
https://archives.postgresql.org/pgsql-jobs/2021-07/
Planet PostgreSQL: https://planet.postgresql.org/
本週的 PostgreSQL 每週新聞由 David Fetter 帶給您
請在星期日太平洋標準時間下午 3:00 之前將新聞和公告提交至 david@fetter.org。
Amit Kapila 推送
文件:雜湊索引。關於雜湊索引的新章節,旨在幫助使用者了解它們的工作方式以及何時使用它們。反向移植到 10,我們在那裡使雜湊索引持久化。作者:Simon Riggs 審閱者:Justin Pryzby, Amit Kapila 討論:https://postgr.es/m/CANbhV-HRjNPYgHo--P1ewBrFJ-GpZPb9_25P7=Wgu7s7hy_sLQ@mail.gmail.com https://git.postgresql.org/pg/commitdiff/e360aa0530b6d1f9e43f2aca760203de0421ef5e
重構函數 parse_subscription_options。不要在 parse_subscription_options 函數簽名中使用多個參數,而是使用 SubOpts 結構來封裝所有訂閱選項及其值。這對於未來需要向訂閱中添加其他選項的工作很有用。此外,使用位圖來傳遞支援的選項並檢索指定的選項,就像在 commit a3dc926009 中完成的方式一樣。作者:Bharath Rupireddy 審閱者:Peter Smith, Amit Kapila, Alvaro Herrera 討論:https://postgr.es/m/CALj2ACXtoQczfNsDQWobypVvHbX2DtgEHn8DawS0eGFwuo72kw@mail.gmail.com https://git.postgresql.org/pg/commitdiff/8aafb02616753f5c6c90bbc567636b73c0cbb9d4
Peter Eisentraut 推送
文件:修復引用標記。 https://git.postgresql.org/pg/commitdiff/903d9aa7801e3198ca24e90be805362ad11b6ec3
改進關於 relkind 不匹配的錯誤訊息。大多數關於 relkind 不受支援或不適用於命令的錯誤訊息都是 “relation \"%s\" is not a table, foreign table, or materialized view” 模式。這種風格可能變得冗長且難以維護。此外,它不是很有幫助:如果我嘗試在一個不受支援的 TOAST 表上建立一個註解,那麼我可以建立一個關於實體化檢視的註解的訊息是沒有意義的。相反,將主要錯誤訊息寫得更短,並更直接地說明嘗試的操作是不可能的。然後,在詳細訊息中,解釋該操作對於對象的 relkind 不受支援。為了簡化這一點,新增一個新的函數 errdetail_relkind_not_supported() 來執行此操作。順便說一下,在適當的地方使用 RELKIND_HAS_STORAGE(),而不是單獨列出 relkind。審閱者:Michael Paquier michael@paquier.xyz 審閱者:Alvaro Herrera alvherre@alvh.no-ip.org 討論:https://postgres.tw/message-id/flat/dc35a398-37d0-75ce-07ea-1dd71d98f8ec@2ndquadrant.com https://git.postgresql.org/pg/commitdiff/2ed532ee8c474e9767e76e1f3251cc3a0224358c
Dean Rasheed 推送
防止並行數值聚合中的數值溢位。以前,各種數值聚合函數透過讓每個 worker 將部分聚合值轉換為 Numeric 並使用 numeric_send() 作為序列化其狀態的一部分來支援並行聚合。這是成問題的,因為 Numeric 的範圍小於 NumericVar 的範圍,因此在非並行模式下會成功的案例中,它可能會溢位(在小數點的任一側)。透過序列化 NumericVars 來修復,以避免溢位風險並確保並行和非並行模式以相同的方式工作。一個額外的好處是,這提高了序列化/反序列化程式碼的效率,這可以顯著提高大量並行 worker 的效能。由於更改聚合序列化狀態的二進制格式的風險,以及之前缺乏現場投訴以及實踐中發生此類溢位的可能性較低,因此沒有反向移植。我提供的補丁。感謝 David Rowley 進行審閱和效能測試,以及 Ranier Vilela 提供的額外建議。討論:https://postgr.es/m/CAEZATCUmeFWCrq2dNzZpRj5+6LfN85jYiDoqm+ucSXhb9U2TbA@mail.gmail.com https://git.postgresql.org/pg/commitdiff/f025f2390e13d7da69da595086fb982bbaf7f329
修復 numeric_mul() 因小數點後數位過多而溢位。如果結果在小數點後有超過 16383 位數,這會透過捨入結果來修復使用數值 *
運算符時的溢位錯誤。只有當結果在小數點之前有太多位數時才會發生溢位錯誤。討論:https://postgr.es/m/CAEZATCUmeFWCrq2dNzZpRj5+6LfN85jYiDoqm+ucSXhb9U2TbA@mail.gmail.com https://git.postgresql.org/pg/commitdiff/e7fc488ad67caaad33f6d5177081884495cb81cb
Tom Lane 推送
重新思考 detach-partition-concurrently-[34] 中封鎖註解的處理方式。在 741d7f104 中,我嘗試讓取消步驟的報告在 pg_cancel_backend() 步驟之後出現,因為這以前是最常見的順序。然而,這並不能確保取消的步驟不會更晚才報告,正如 buildfarm 成員 idiacanthus 最近出現的錯誤所示。与其使用更多的註解使事情變得更加複雜,不如直接強制先報告取消的結果。這並不是不自然的。回溯修補到 v14,這些測試案例首次出現的地方。報告: https://buildfarm.postgresql.org/cgi-bin/show_log.pl?nm=idiacanthus&dt=2021-07-02%2001%3A40%3A04 https://git.postgresql.org/pg/commitdiff/c04c767059b8460b99f6aa4aae5450ab3ee257a3
減少 LookupOpclassInfo() 中 cache-clobber 測試的開銷。 Commit 03ffc4d6d 新增了邏輯,在啟用 CLOBBER_CACHE_ALWAYS 時繞過 LookupOpclassInfo 中的所有快取行為。我似乎沒有停下來思考這會付出什麼代價,但最近的調查顯示代價是巨大的:它大約使 cache-clobber 測試運行的時間加倍。當嘗試測試 opclass-cache 加載邏輯本身時,這種行為似乎確實有價值,但對於其他目的而言,成本過高。因此,讓我們退回到僅在 debug_invalidate_system_caches_always 至少為 3 時才執行此操作;或者在較舊的分支中,當定義了 CLOBBER_CACHE_RECURSIVELY 時。在此同時,清理 LookupOpclassInfo 中的一些其他小問題。重新排序程式碼,以便在極不可能發生 OOM (記憶體不足) 的情況下,當我們嘗試為新條目分配空間時,不會留下損壞的快取條目(導致後來的核心傾印)。(這似乎是我在 03ffc4d6d 中的疏忽。)此外,在 >= v13 中,停止分配多餘的一個陣列條目。這顯然是 851b14b0c 中草率回退遺留下來的。回溯修補到所有支援的分支,主要是為了減少 cache-clobbering buildfarm 動物的運行時間。討論: https://postgr.es/m/1370856.1625428625@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/9753324b7d9eba0aaf7e12942f52c240bfc7da7c
文件:新增關於帶有小數分鐘 UTC 偏移的時間戳記的信息。我們的程式碼長期以來都支援小數分鐘 UTC 偏移,但主要文件中沒有提及這種可能性,只有附錄 B 中非常間接的引用。改善這一點。討論: https://postgr.es/m/162543102827.697.5755498651217979813@wrigleys.postgresql.org https://git.postgresql.org/pg/commitdiff/ab2e19987ff66f83dfb99b5c541d9e05e8b0ede3
避免在 postgres_fdw 的 conversion_error_callback 中進行目錄查詢。與 50371df26 一樣,這是一個壞主意,因為回呼實際上無法知道正在拋出的錯誤是什麼,因此無法判斷嘗試目錄存取是否安全。与其將這些存取推入主線程式碼中,在那裡它們通常會浪費週期,不如查看查詢的 rangetable。此更改確實意味著我們將列印查詢別名(如果使用了任何別名),而不是表格或欄位的真實名稱。但這似乎不是一件壞事:例如,這在自我連接案例中肯定是一個更有用的定義。無論如何,似乎不太可能有任何應用程式依賴此細節,因此更改它是安全的。由我修補。最初由 Andres Freund 投訴; Bharath Rupireddy 指出了與 conversion_error_callback 的連接。討論: https://postgr.es/m/20210106020229.ne5xnuu6wlondjpe@alap3.anarazel.de https://git.postgresql.org/pg/commitdiff/c7b7311f6177b90fe5033b8ed2c10dfcbb863eb6
降低規劃深度巢狀檢視表的成本。 Joel Jacobson 報告說,對簡單(可扁平化)檢視表的深度巢狀會導致 N 深度巢狀的規劃時間呈 O(N^3) 增長。事實證明,這個成本的很大一部分來自於複製每個檢視表的 RTE_SUBQUERY RTE 的「子查詢」子樹。但是,一旦我們成功地扁平化了子查詢,我們就不再需要它了,因為規劃器不會對該 RTE 執行任何其他有趣的操作。我們已經在 setrefs.c 期間刪除了子查詢指標(參見 add_rte_to_flat_rtable),但在此之前它也是無用的累贅。在 pull_up_simple_subquery 完成 RTE 後立即清除指標會將成本從 O(N^3) 降低到 O(N^2);這仍然不是很好,但它已經好多了。進一步的改進將需要重新思考 RTE 資料結構,這將在另一個執行緒中考慮。由我修補;感謝 Dean Rasheed 的審閱。討論: https://postgr.es/m/797aff54-b49b-4914-9ff9-aa42564a4d7d@www.fastmail.com https://git.postgresql.org/pg/commitdiff/64919aaab45076445051245c9bcd48dd84abebe7
允許 CustomScan 提供者說明它們是否支援投影。以前,所有 CustomScan 提供者都必須支援投影,但在某些情況下這可能不方便。新增一個標誌位來說明是否支援。發行說明的重要項目:這是非向後相容的,因為預設現在是假設 CustomScan 提供者無法投影,而不是假設它們可以投影。它是 fail-soft 的,但可能會因添加不必要的 Result 節點而導致明顯的效能損失。 Sven Klemm,由 Aleksander Alekseev 審閱;由我進行了一些外觀修飾。討論: https://postgr.es/m/CAMCrgp1kyakOz6c8aKhNDJXjhQ1dEjEnp+6KNT3KxPrjNtsrDg@mail.gmail.com https://git.postgresql.org/pg/commitdiff/955b3e0f9269639fb916cee3dea37aee50b82df0
修復 postgres_fdw 中對於可證明為空的遠端 UPDATE/DELETE 的崩潰。在 86dc90056 中,我編寫 find_modifytable_subplan 時假設,如果 ModifyTable 的直接子節點是一個 Result,它必須是一個帶有子計劃的投影 Result。但是,如果 UPDATE 或 DELETE 具有可證明為恆假的 WHERE 子句,情況就不是這樣:我們將生成一個沒有子節點的 Result 的虛擬子計劃。新增缺少的 null-check,以便我們不會在這種情況下崩潰。根據 Alexander Pyhalov 的報告。討論: https://postgr.es/m/b9a6f53549456b2f3e2fd150dcd79d72@postgrespro.ru https://git.postgresql.org/pg/commitdiff/b9734c13f168ef0d487aa122e486ca9b6dd6aa59
拒絕 WITH 中的查詢重寫為僅 NOTIFY 的情況。由於執行器無法處理作為計劃樹節點出現的公用程式語句,因此我們無法支援重寫規則將 NOTIFY 插入到較大查詢的 WITH 子句中出現的 INSERT/UPDATE/DELETE 命令中的情況。(可以想像解決這個問題的方法,但這將是一個新功能而不是錯誤修復,到目前為止還沒有人提出要求。)RewriteQuery 檢查了這一點,但它遺漏了 DML 命令重寫為僅 NOTIFY 的情況。這將導致稍後在規劃中崩潰。新增遺漏的檢查,並提高對此區域的測試水準。根據 Yaoguang Chen 的錯誤 #17094。自引入 WITH 以來一直存在問題,因此回溯修補到所有支援的分支。討論: https://postgr.es/m/17094-bf15dff55eaf2e28@postgresql.org https://git.postgresql.org/pg/commitdiff/a9da1934e971b38ab360ce80a352fbfc4d2d986b
更新 configure 對 libldap 的探測以與 OpenLDAP 2.5 配合使用。單獨的 libldap_r 已經消失,libldap 本身現在始終是執行緒安全的。不幸的是,似乎沒有簡單的方法可以通過檢查來判斷 libldap 是否是執行緒安全的,因此我們必須相信如果沒有 libldap_r,libldap 是執行緒安全的。這應該是可以的,因為看起來 libldap_r 至少在過去 20 年一直是安裝的標準部分。由 Adrian Ho 報告和修補。回溯修補到所有支援的分支,因為人們可能會嘗試使用較新的 OpenLDAP 來構建它們中的任何一個。討論: https://postgr.es/m/17083-a19190d9591946a7@postgresql.org https://git.postgresql.org/pg/commitdiff/d0a02bdb8c2576b5aa607f127320e444080bd579
避免建立標記為 LATERAL 的 RESULT RTE。Commit 7266d0997 加入了程式碼,可提取簡單常數函數的結果,將 RTE_FUNCTION RTE 轉換為虛擬的 RTE_RESULT RTE,因為不再需要掃描它。但我忘記清除 RTE 上設定的 LATERAL 旗標。如果該函數簡化為常數,它肯定不包含任何橫向參考,因此這種簡化在邏輯上是可行的。之所以需要這樣做,是因為其他許多地方都會斷言 RESULT RTE 並非 LATERAL。根據 Yaoguang Chen 提出的錯誤 #17097。回溯修補到引入錯誤程式碼的 v13 版本。討論:https://postgr.es/m/17097-3372ef9f798fc94f@postgresql.org https://git.postgresql.org/pg/commitdiff/d23ac62afa646b7073a7f0db0a137308459a263b
修正 AIX 建置失敗的問題。在 commit d0a02bdb8 中,我假設統一探測 ldap_bind 會使意圖更清楚。然而,由於某些不明原因(也許它在 AIX 上是一個巨集?),這似乎在 AIX 上不起作用。恢復到先前的行為,即針對執行緒安全案例探測 ldap_simple_bind,否則探測 ldap_bind。根據 buildfarm 成員 hoverfly。討論:https://postgr.es/m/17083-a19190d9591946a7@postgresql.org https://git.postgresql.org/pg/commitdiff/31e8cfac5845fa57e1805f4ff81e00ab78dff025
再次修正 AIX 建置失敗的問題。我錯誤地診斷了 hoverfly 不開心的原因。仔細觀察,除非 libssl 也存在,否則它似乎無法連結 libldap;所以問題是我在檢查之前清除 LIBS 的想法。恢復到基本上原始的程式碼,除了當 libldap_r 不存在時,改為使用 libldap 而不是失敗。根據 buildfarm 成員 hoverfly。討論:https://postgr.es/m/17083-a19190d9591946a7@postgresql.org https://git.postgresql.org/pg/commitdiff/53c38a086a8001d63401671755638bc95c7fa1c7
修正 ldap_initialize 的錯誤測試。唉...我期望 AC_CHECK_LIB 做一些它沒有做的事情,也就是更新 LIBS。這導致找不到 ldap_initialize。透過移動 ldap_initialize 的探測來修正。在某種意義上,這無論如何都更正確,因為(至少目前)我們關心的是 ldap_initialize 是否存在於 libldap 而不是 libldap_r 中。根據 buildfarm 成員 elver 和本地測試。討論:https://postgr.es/m/17083-a19190d9591946a7@postgresql.org https://git.postgresql.org/pg/commitdiff/9f6be2e79f88c65cef7cfeb0580e8b2ba74974f6
在 ALTER EXTENSION ADD/DROP 期間鎖定擴充功能。雖然我們小心地鎖定了要新增或刪除的物件,但我們未能獲得擴充功能本身的任何類型的鎖定。這允許 ALTER 與 DROP EXTENSION 並行進行,這會導致幾個問題。如果兩個命令都成功,我們將在 pg_depend 中留下一個懸空的連結,這將在以後引起問題。此外,如果 ALTER 因為某些原因而失敗,它可能會嘗試列印擴充功能的名稱,這可能會導致崩潰,或者(在較舊的分支中)導致一個愚蠢的錯誤訊息,抱怨擴充功能「(null)」。根據 Alexander Lakhin 提出的錯誤 #17098。回溯修補到所有支援的分支。討論:https://postgr.es/m/17098-b960f3616c861f83@postgresql.org https://git.postgresql.org/pg/commitdiff/626731db26ae2617e41536678440c3817128a006
Michaël Paquier 推送了
在備份結束時使用 WaitLatch() 而不是 pg_usleep()。這關係到 pg_stop_backup() 和 BASE_BACKUP,當等待備份所需的 WAL 區段被歸檔時。這簡化了此程式碼路徑中使用的等待事件的處理。作者:Bharath Rupireddy 審閱者:Michael Paquier、Stephen Frost 討論:https://postgr.es/m/CALj2ACU4AdPCq6NLfcA-ZGwX7pPCK5FgEj-CAU0xCKzkASSy_A@mail.gmail.com https://git.postgresql.org/pg/commitdiff/2aca19f2989aa938ece7306678f5494a984ece3f
使用其機制的通用介面重構 SASL 程式碼。SCRAM 和 SASL 的程式碼一直緊密地連結在一起,因為 SCRAM 存在於核心程式碼中,這使得難以理解新增的 SASL 機制,但這些機制在設計上是不同的設施,而 SCRAM 只是 SASL 的一個選項。這重構了與兩者相關的程式碼,以便後端和前端都使用一組 SASL 機制的回呼函數,並在新增 SASL 機制時記錄預期的內容。兩層之間的分離是整潔的,前端和後端使用兩組回呼函數來標記兩個設施之間的界線。回呼函數的形狀現在直接受到 SCRAM 使用的常式的啟發,因此程式碼變更非常簡單,並且 SASL 程式碼已移至其自己的一組檔案中。這些可能會根據未來新增 SASL 機制的方式和時間而發生變化。作者:Jacob Champion 審閱者:Michael Paquier 討論:https://postgr.es/m/3d2a6f5d50e741117d6baf83eb67ebf1a8a35a11.camel@vmware.com https://git.postgresql.org/pg/commitdiff/9fd85570d179f10f93344d722005f7086b3c31ca
在 xlogreader.c 中新增忘記的 LSN_FORMAT_ARGS()。這些應該是 4035cd5 的一部分,該程式碼引入了對 wal_compression 的 LZ4 支援。https://git.postgresql.org/pg/commitdiff/0f80b47d24b470babd61f2d9927d1956075f771d
在 SASL 交換中新增更多健全性檢查。新增了以下檢查,使 SASL 基礎架構更能意識到實施新機制時的缺陷:- 偵測機制是否未產生任何輸出,如果在後端交換失敗,如果存在等待傳送的訊息,則失敗。- 處理前端的零長度訊息。後端已經處理了這個問題,如果傳送空訊息,SCRAM 會抱怨,因為這對這個機制來說是不允許的,但其他機制可能需要這個功能(SASL 規範允許這樣做)。- 確保機制在前端交換的過程中產生一條訊息。SCRAM 在實施時已經滿足所有這些要求,並且 9fd8557 中最近對 SASL 的重構有助於以更清晰的方式記錄這一點。分析者:Jacob Champion 作者:Michael Paquier 審閱者:Jacob Champion 討論:https://postgr.es/m/3d2a6f5d50e741117d6baf83eb67ebf1a8a35a11.camel@vmware.com https://git.postgresql.org/pg/commitdiff/44bd0126c70b5b90e8e2d604833a6476abbbffe6
David Rowley 推送了
減少建立分割區邊界時的 palloc 數量。在 LIST、RANGE 和 HASH 分割的每個 create_*_bound()
函式中,都有大量的 palloc 呼叫,可以減少到更少的數量。在每個函式中,都會建立一個陣列,以便我們可以在建立 PartitionBoundInfo 之前對其進行 qsort 排序。對於 LIST 和 HASH 分割,會配置一個指標陣列,然後在該陣列中配置每個元素。由於每個維度的項目數量事先已知,因此我們只需為此分配單個記憶體區塊即可。同樣地,對於所有分割策略,我們都能減少建立 ->datums 欄位的分配數量。這是一個 Datum 指標的陣列,但每個元素指向的 Datums 沒有必要個別分配。一個大的記憶體區塊就足夠了。對於 RANGE 分割,PartitionBoundInfo->kind 欄位也可以獲得相同的處理。我們可以將相同的最佳化應用於 partition_bounds_copy()。這樣做可能會對在分割區修剪或對分割表執行 DML 期間搜尋正確分割區時的快取效能產生很小的影響。但是,這種影響可能很小,而且主要目的是減少 palloc 的開銷。作者:Nitin Jadhav、Justin Pryzby、David Rowley。審閱者:Justin Pryzby、Zhihong Yu。討論:https://postgr.es/m/flat/CAMm1aWYFTqEio3bURzZh47jveiHRwgQTiSDvBORczNEz2duZ1Q@mail.gmail.com https://git.postgresql.postgresql.org/pg/commitdiff/53d86957e980efa06f15232b8cff430d4cc6dd64
修正註解中的錯字。作者:James Coleman。討論:https://postgr.es/m/CAAaqYe8f8ENA0i1PdBtUNWDd2sxHSMgscNYbjhaXMuAdfBrZcg@mail.gmail.com https://git.postgresql.org/pg/commitdiff/9ee91cc583802c6507fbc31c348a79e63a10f956
使用雜湊表加速 NOT IN(values)。與 50e17ad28 類似,它允許使用雜湊表處理帶有一組常數的 IN 子句,這裡我們為 NOT IN 子句新增了相同的功能。NOT IN 的求值結果與以下相同:WHERE a <> v1 AND a <> v2 AND a <> v3。顯然,如果我們使用雜湊表,我們必須與其完全等效,並且返回相同的結果,同時考慮到條件的任何一側都可能包含 NULL。這需要一些特殊的處理才能與雜湊表版本一起使用。處理 NOT IN 時,ScalarArrayOpExpr 的運算子將是 <> 運算子。為了能夠建立和查詢雜湊表,我們必須使用 <> 的求反運算子。規劃器檢查它是否存在且是否可雜湊,並在 ScalarArrayOpExpr 中設定相關欄位,以指示執行器使用雜湊。作者:David Rowley、James Coleman。審閱者:James Coleman、Zhihong Yu。討論:https://postgr.es/m/CAApHDvoF1mum_FRk6D621edcB6KSHBi2+GAgWmioj5AhOu2vwQ@mail.gmail.com https://git.postgresql.org/pg/commitdiff/29f45e299e7ffa1df0db44b8452228625479487f
修正 pg_size_pretty(bigint) 中的錯誤傳回值。由於 pg_size_pretty(bigint) 的實作方式,當給定一個負數的位元組數時,傳回值可能與給定等效的正數的位元組數時的正數傳回值不符。這是由於兩個獨立的問題。1. 該函式使用位元移位將位元組數轉換為更大的單位。位元移位執行的捨入與除法不同。例如,-3 >> 1 = -2,但 -3 / 2 = -1。這兩個運算只有在正數時才等效。2. half_rounded() 巨集朝正無限大捨入。這意味著負數朝零捨入,而正數則遠離零捨入。這裡我們通過除法而不是位元移位來修正 #1。我們通過調整 half_rounded 巨集始終遠離零捨入來修正 #2。此外,調整 pg_size_pretty(numeric) 函式,使其更明確地使用除法而不是位元移位。一個隨意的觀察者可能認為使用了位元移位,因為一個靜態函式名為 numeric_shift_right。然而,該函式正在根據位元數計算除數並執行除法。在這裡,我們使它更加清楚。這個更改只是表面上的,不會影響函式的數值版本的傳回值。在這裡,我們還為 pg_size_pretty() 的兩個版本添加了一組迴歸測試,這些測試直接測試了函式在切換到下一個單位之前和之後的值。此錯誤是在 8a1fab36a 中引入的。在此之前,負數值始終以位元組為單位顯示。作者:Dean Rasheed、David Rowley。討論:https://postgr.es/m/CAEZATCXnNW4HsmZnxhfezR5FuiGgp+mkY4AzcL5eRGO4fuadWg@mail.gmail.com 向後移植:9.6,錯誤在此版本中引入。https://git.postgresql.org/pg/commitdiff/55fe609387685de1c754332e260b2d0e17d257dc
在 pg_size_pretty 和 pg_size_bytes 中使用查找表來表示單位。多年來,我們已經發展了 2 個版本的 pg_size_pretty,一個用於 BIGINT,另一個用於 NUMERIC。兩者都應該輸出相同的內容,但由於兩個函式都沒有共享關於使用哪些單位以及如何轉換到下一個最大單位的真實來源,因此保持它們同步比需要的更難。在這裡,我們新增一個靜態陣列,用於定義我們識別的單位,並且讓 pg_size_pretty 和 pg_size_pretty_numeric 都使用它。這將使未來新增任何單位成為一項非常簡單的任務。該表包含所需的所有資訊,以便我們也可以修改 pg_size_bytes 以使用查找表,因此也對其進行調整。這裡沒有行為上的變更。作者:David Rowley。審閱者:Dean Rasheed、Tom Lane、David Christensen。討論:https://postgr.es/m/CAApHDvru1F7qsEVL-iOHeezJ+5WVxXnyD_Jo9nht+Eh85ekK-Q@mail.gmail.com https://git.postgresql.org/pg/commitdiff/56ff8b29919f75a078969766393b9e20871a75c8
教導 pg_size_pretty 和 pg_size_bytes 關於 PB (petabytes)。有人談論添加一直到 yottabytes 的單位,但似乎不太可能有人需要這些單位。由於如此大的單位並不常見,因此 pg_size_pretty 輸出大於 petabytes 的單位實際上對任何人都有幫助的可能性似乎不大。由於 petabytes 即將來臨,讓我們只添加這些單位。也許有一天我們會添加額外的單位,但可能需要一段時間才能考慮到資料庫的大小超過 petabytes。作者:David Christensen。討論:https://postgr.es/m/CAOxo6XKmHc_WZip-x5QwaOqFEiCq_SVD0B7sbTZQk+qqcn2qaw@mail.gmail.com https://git.postgresql.org/pg/commitdiff/ca2e4472ba7b6e5e8cd8955eacffb90e4d88d085
Álvaro Herrera 推送了
改進 TestLib::system_or_bail 錯誤報告。原始程式碼未引用完整的失敗命令,也沒有列印失敗的原因。同時執行這兩項操作。這僅僅是表面上的修改,因此沒有向後移植。作者:Álvaro Herrera alvherre@alvh.no-ip.org。審閱者:Tom Lane tgl@sss.pgh.pa.us。審閱者:Daniel Gustafsson daniel@yesql.se。討論:https://postgr.es/m/202106301524.eq5pblzstapj@alvherre.pgsql https://git.postgresql.org/pg/commitdiff/5798ca529935698ab976780565fb2b4d8d34d810
libpq:修正了在管道中止狀態下傳送查詢的問題。當以管道模式傳送查詢時,我們在使連線保持正確狀態方面不夠謹慎,導致 PQgetResult 無法正常運作;在讀取包含錯誤的結果後嘗試傳送查詢並讀取更多結果時,有時會發生掛起。透過確保正確變更 libpq 內部狀態來修正此問題。所有狀態變更都由 pqAppendCmdQueueEntry() 的呼叫者完成;如果每個呼叫者都包含此邏輯會變得過於重複,因此將其全部放入該函式中,並免除呼叫者的責任。新增一個測試來驗證此案例。在沒有程式碼修正的情況下,此新測試有時會掛起。此外,文件說明當沒有查詢等待結果時,PQisBusy() 將傳回 false。這並非直觀明顯,並且在該點呼叫 PQgetResult() 會獲得 NULL,這令人困惑。Boris Kolpackov 的措辭。順便一提,根據 Ranier Vilela 的說法,修正了將 "false" 錯誤地用於表示 "0" 的情況。回溯修補至版本 14。作者:Álvaro Herrera alvherre@alvh.no-ip.org 報告者:Boris Kolpackov boris@codesynthesis.com 討論:https://postgr.es/m/boris.20210624103805@codesynthesis.com https://git.postgresql.org/pg/commitdiff/ab09679429009bfed4bd894a6187afde0b7bdfcd
Fujii Masao 推送了
postgres_fdw:收緊了 batch_size、fetch_size 選項允許的值。以前,諸如 '100$%$#$#', '9,223,372,' 之類的值會被接受,並被視為 postgres_fdw 選項 batch_size 和 fetch_size 的有效整數。然而,fdw_startup_cost 和 fdw_tuple_cost 選項並非如此,對於這些選項會拋出錯誤。這是因為在使用 strtol 將字串轉換為整數時,未使用 endptr。此提交變更了邏輯,使其使用 parse_int 函式而不是 strtol,因為它可以透過在無法將字串轉換為整數時傳回 false 來達到目的。請注意,此函式還會將諸如 '100.456' 之類的值四捨五入為 100,並將 '100.567' 或 '100.678' 四捨五入為 101。同時,對 fdw_startup_cost 和 fdw_tuple_cost 選項使用 parse_real。由於 reloptions 和 GUC 正在使用 parse_int 和 parse_real,因此在 postgres_fdw 中使用它們比直接使用 strtol 和 strtod 更合適。回溯修補至 v14。作者:Bharath Rupireddy 審閱者:Ashutosh Bapat, Tom Lane, Kyotaro Horiguchi, Fujii Masao 討論:https://postgr.es/m/CALj2ACVMO6wY5Pc4oe1OCgUOAtdjHuFsBDw8R5uoYR86eWFQDA@mail.gmail.com https://git.postgresql.org/pg/commitdiff/d854720df6df68cfe1432342e33c9e3020572a51
doc:修正了關於 pg_stat_statements.track_planning 的描述。此提交修正了 track_planning 選項描述中的錯誤措辭,例如 "a fewer kinds"。回溯修補至 v13,即新增 pg_stat_statements.track_planning 的版本。作者:Justin Pryzby 審閱者:Julien Rouhaud, Fujii Masao 討論:https://postgr.es/m/20210418233615.GB7256@telsasoft.com https://git.postgresql.org/pg/commitdiff/9d2a7757347cb1adb48599fce4dcde0f1fc9e9ae
Daniel Gustafsson 推送了
Thomas Munro 推送了
刪除了更多關於信號量的過時註釋。Commit 6753333f 停止使用信號量作為重量級鎖定的睡眠/喚醒機制,但一些關於該方案的過時引用仍然存在於註釋中。與類似的 commit 25b93a29 一樣,一直回溯修補。審閱者:Daniel Gustafsson daniel@yesql.se 討論:https://postgr.es/m/CA%2BhUKGLafjB1uzXcy%3D%3D2L3cy7rjHkqOVn7qRYGBjk%3D%3DtMJE7Yg%40mail.gmail.com https://git.postgresql.org/pg/commitdiff/2f783380641db4cc598acd108186a446e4919290
修正了 pgbench 時間戳記錯誤。Commit 547f04e 將 pgbench 變更為使用微秒會計,但引入了幾個日誌記錄和聚合錯誤:1. 我們列印 Unix epoch 時間戳記,以便您可以將它們與其他日誌關聯,但這些時間戳記在不知不覺中變更為使用系統相關的參考 epoch。計算 Unix 時間戳記,並在整個 Unix epoch 秒的邊界上開始聚合間隔,與之前一樣。2. 需要縮放使用者提供的聚合間隔。回溯修補至 14。作者:Fabien COELHO coelho@cri.ensmp.fr 作者:Yugo NAGATA nagata@sraoss.co.jp 作者:Kyotaro Horiguchi horikyota.ntt@gmail.com 報告者:YoungHwan Joo rulyox@gmail.com 報告者:Gregory Smith gregsmithpgsql@gmail.com 討論:https://postgr.es/m/CAF7igB1r6wRfSCEAB-iZBKxkowWY6%2BdFF2jObSdd9%2BiVK%2BvHJg%40mail.gmail.com 討論:https://postgr.es/m/CAHLJuCW_8Vpcr0%3Dt6O_gozrg3wXXWXZXDioYJd3NhvKriqgpfQ%40mail.gmail.com https://git.postgresql.org/pg/commitdiff/0e39a608ed5545cc6b9d538ac937c3c1ee8cdc36
Jeff Davis 推送了
消除了與 IDENTIFY_SYSTEM 相關的複製協定錯誤。IDENTIFY_SYSTEM 必須在 START_REPLICATION 之前執行的要求既未記錄,也非必要。刪除該錯誤並確保在 START_REPLICATION 中初始化 ThisTimeLineID。選擇不回溯修補,因為此要求是預期行為(即使執行不一致),並且不太可能導致任何重大問題。作者:Jeff Davis 審閱者:Andres Freund 討論:https://postgr.es/m/de4bbf05b7cd94227841c433ea6ff71d2130c713.camel%40j-davis.com https://git.postgresql.org/pg/commitdiff/8e7811e952b4e0993330f7ac1fb1448a1ca69b9a
修正了 assign_record_type_typmod()。如果在錯誤的地方發生錯誤,可能會在雜湊表中留下未初始化的條目,導致崩潰。已修正。此外,更仔細地注意操作順序,以便分配錯誤不會在 CacheMemoryContext 中洩漏記憶體或不必要地推進 NextRecordTypmod。回溯修補至版本 11。較早的版本(35ea75632a5 之前)沒有此問題,因為未初始化的雜湊條目包含有效的空列表。作者:Sait Talha Nisanci Sait.Nisanci@microsoft.com 審閱者:Andres Freund 討論:https://postgr.es/m/HE1PR8303MB009069D476225B9A9E194B8891779@HE1PR8303MB0090.EURPRD83.prod.outlook.com 回溯修補至:11 https://git.postgresql.org/pg/commitdiff/dd0e37cc1598050ec38fa289908487d4f5c96dca
Jie Zhang 提交了一個修補程式,使 libpq 的 PQsendFlushRequest 按照文檔記錄傳回 0,而不是像程式碼一樣傳回 false。
Gilles Darold 提交了另一個修訂的修補程式,以新增可以在 xact 回呼中捕獲的新事件 XACT_EVENT_COMMAND_START 和 SUBXACT_EVENT_COMMAND_START,當要執行新命令時。
Ranier Vilela 提交了一個修補程式,以修正在 src/backend/utils/adt/varlena.c 中可能未初始化的變數宣告。
Ronan Dunklau 和 Ranier Vilela 交換了修補程式,以允許 Sort 節點使用快速的 "single datum" tuplesort。
Andrey V. Lepikhov 提交了另兩個修訂的修補程式,以教導最佳化器考慮將非分割表與分割表的每個分割區進行 partitionwise join,並且不允許用於連接兩個分割(或附加)關係的非對稱機制,因為它可能在 NestLoop 路徑的重新參數化期間導致 CPU 和記憶體的巨大消耗。
Victor Spirin 提交了兩個修訂的修補程式,以使 Windows 上的重新命名操作具有原子性。
Peter Smith 提交了一個修補程式,以增加 psql 的 CREATE PUBLICATION 的 tab 完成的細微程度。
Amit Langote 提交了另一個修訂的修補程式,以匯出 get_partition_for_tuple(),並使用相同的方法來避免對某些 RI 檢查使用 SPI。
Hou Zhijie 提交了另一個修訂的修補程式,使其可以將表註解為安全地允許(或不允許)平行 DML,並在使 INSERT ... SELECT 中可以使用平行查詢時使用相同的方法,並新增 pg_get_table_parallel_dml_safety(regclass) 函式。
Dilip Kumar 提交了一個修補程式,使 CREATE DATABASE 成為 WAL 記錄的動作,以避免檢查點和寫入風暴,這些使得先前的實作變得繁重。
Zeng Wenjing 提交了一個修補程式,以更早地檢查同步備用伺服器。
Vigneshwaran C 提交了另一個修補程式版本,用於識別在 CREATE/ALTER SUBSCRIPTION 期間從發布者遺漏的出版品。
Dipesh Pandit 提交了一個修補程式,透過維護目前正在歸檔的日誌片段編號,並將其遞增 '1' 以取得下一個 WAL 檔案,來緩解 WAL 封存器中 O(N^2) 的目錄掃描。
Justin Pryzby 提交了一個修補程式,在 procarray.c 中新增了一些 ASSERTION,並在 pg_resetwal.c 中新增了一個新的 oldest-transaction-id 可選參數。
Gilles Darold 提交了另三個修補程式版本,用於將 CASE 子句的下推 (pushdown) 新增到 PostgreSQL FDW。
Bharath Rupireddy 和 Peter Smith 交換了修補程式,使 parse_subscription_options 函數負責預先清除 SubOpts 參數,而不是希望呼叫者會執行此操作,並刪除對 "supported_opts" 的多餘條件檢查,因為我們已經知道該選項必須受到支援。
Ajin Cherian、Amit Kapila 和 Peter Smith 交換了修補程式,以新增對邏輯複製的預先準備交易 (prepared transactions) 的支援。
Vigneshwaran C 提交了另兩個修補程式版本,以增強錯誤訊息,在重複選項錯誤的情況下包含選項名稱。
Greg Nancarrow 提交了另一個修補程式版本,以新增一個新的 "client_connection" 事件,以及針對相同事件的用戶端連線觸發器支援。
Gurjeet Singh 提交了一個修補程式,明確聲明 --sync-only 不會修改資料。
Kyotaro HORIGUCHI 提交了一個修補程式,使 FPI_FOR_HINT 遵循標準的 FPI 發射策略 (emitting policy)。
David Rowley 提交了另一個修補程式版本,以刪除 BIGINT 序列 MINVALUE/MAXVALUE 值上無用的 int64 範圍檢查。
Bharath Rupireddy 提交了另一個修補程式版本,透過更具體地說明物件無法新增到相同出版品的原因,來改善出版品錯誤訊息。
Andy Fan 提交了另一個修補程式版本,以擴展規劃器 (planner) 中唯一性的使用方式。
Gurjeet Singh 提交了一個修補程式,當 initdb 的 --sync-only 選項與其他選項混用時,發出警告。
Dean Rasheed 提交了另一個修補程式版本,以修復 NUMERIC 類型中指數運算的精度損失錯誤,並防止一些溢位錯誤。
Bruce Momjian 提交了另三個修補程式版本,以修復一個會損毀可見性地圖 (visibility map) 的錯誤。
Dagfinn Ilmari Mannsåker 提交了一個修補程式,在適當的地方使用 l*_node()
系列函數。
Li Japin 和 Ranier Vilela 交換了修補程式,以驗證 parse_subscription_options 中的 slot_name。
Yugo Nagata 提交了另一個修補程式版本,以避免一些 pgbench 錯誤。
Euler Taveira de Oliveira 和 Greg Nancarrow 交換了修補程式,以實現邏輯複製的列篩選 (row filtering)。
Takamichi Osumi 提交了一個修補程式,以修復一個導致交易統計資訊無法衡量邏輯複製進度的錯誤。
Fabien COELHO 提交了另兩個修補程式版本,以用更好的 PRNG 取代 rand48。
Masahiko Sawada 提交了一個修補程式,以闡明 ALTER SUBSCRIPTION 中關於 refresh_option 選項的說明文件。
Robert Haas 提交了另一個修補程式版本,以重構 basebackup.c。
Seino Yuki 提交了一個修補程式,以追蹤實體化視圖 (materialized views) 的統計資訊。
Georgios Kokolatos 提交了另一個修補程式版本,以教導 pg_receivewal 使用 lz4 壓縮。
Kyotaro HORIGUCHI 提交了兩個修補程式版本,以嚴格拒絕命令列上無效的數值參數,並抱怨環境變數中應為數值的相同參數。
Alexander Lakhin 和 Michaël Paquier 交換了修補程式,以修復 pg_ls_dir。
Quan Zongliang 提交了四個修補程式版本,以修復當 blocksize 為 32k 時,pageinspect 的 page_header 函數返回負數的錯誤。
Bharath Rupireddy 提交了另一個修補程式版本,以消除使用 "non-negative" 的錯誤訊息的歧義。
Atsushi Torikoshi 提交了另一個修補程式版本,新增一個函數來記錄未截斷的查詢字串及其針對在具有指定進程 ID 的後端上目前正在執行的查詢的計畫。
Hou Zhijie 提交了另一個修補程式版本,新增對發布的架構層級支援。
Bertrand Drouvot 提交了另一個修補程式版本,以修復一個錯誤,該錯誤表現為使用 toast 的關係重寫 (relation rewrite) 的邏輯解碼不會重置 toast_hash。
Georgios Kokolatos 提交了一個修補程式,以在 pg_receivewal 中測試 gzip 壓縮。
Pavel Borisov 提交了另一個修補程式版本,以透過 LIST 和 HASH 自動產生分割區。
Amul Sul 提交了另一個修補程式版本,以新增一個 RelationGetSmgr 內聯函數。
David Rowley 提交了另一個修補程式版本,以在 RelOptInfo 中追蹤未修剪的分割區 (non-pruned partitions),並允許在更多情況下進行有序分割區掃描。
Dagfinn Ilmari Mannsåker 提交了一個修補程式,以將 CREATE SCHEMA 的 Tab 補全新增到 psql。
Zhihong Yu 提交了一個修補程式,以縮短 find_hash_columns() 中對所需欄位的測試。
Nathan Bossart 提交了另一個修補程式版本,以預先分配 WAL 片段。
Tomáš Vondra 提交了另一個修補程式版本,以使 pg_dump 可以單獨傾印函數。
Peifeng Qiu 提交了一個修補程式,以支援 postgres_fdw 的 Kerberos 驗證。
Erik Rijkers 提交了一個修補程式,將 JSON 操作包含為 JIT 編譯的候選者。
Fabien COELHO 提交了另一個修補程式版本,以分解 psql 中的 echo 程式碼。
David Rowley 提交了一個修補程式,以將 Result Cache 節點的名稱更改為 Memoize。
Soumyadeep Chakraborty 提交了另一個修補程式版本,以在 pg_stats 中顯示長度和邊界直方圖 (length and bounds histograms)。
Ranier Vilela 提交了一個修補程式,透過檢查陣列項目的最大限制,來防止 src/backend/access/nbtree/nbtxlog.c 中可能的記憶體損壞。
Thomas Munro 提交了另一個修補程式版本,為 psql 的 \watch 命令新增 PSQL_WATCH_PAGER 設定。