本週人物:https://postgresql.life/post/markus_wanner/
PGroonga 2.2.7,一個適用於所有語言的全文檢索平台,已發布。https://pgroonga.github.io/
PostGIS 3.0.3,PostgreSQL 的業界標準地理資訊系統套件,已發布。http://postgis.net/2020/11/20/postgis-3.0.3/
pgtt 2.2,用於實現全域臨時表的擴充套件,已發布。https://github.com/darold/pgtt/releases/tag/v2.2
pgAdmin4 4.28,適用於 PostgreSQL 的 Web 和原生 GUI 控制中心,已發布。https://www.pgadmin.org/docs/pgadmin4/dev/release_notes_4_28.html
pgbouncer 1.15.0,PostgreSQL 的連線池等,已發布。https://www.pgbouncer.org/2020/11/pgbouncer-1-15-0
pitrery 3.2,一組用於管理 PostgreSQL 的 PITR 備份的 Bash 腳本,已發布。http://dalibo.github.io/pitrery/
pg_statement_rollback v1.1,一個新增伺服器端交易並在語句層級回滾的擴充套件,已發布。https://github.com/lzlabs/pg_statement_rollback/releases/tag/v1.1
http://archives.postgresql.org/pgsql-jobs/2020-11/
Planet PostgreSQL: http://planet.postgresql.org/
本週 PostgreSQL 每週新聞由 David Fetter 為您帶來
請在週日下午 3:00 (PST8PDT) 之前將新聞和公告提交至 david@fetter.org。
Tom Lane 推送
修正關於 amcanmulticol 與 amcaninclude 的模糊想法。這些標誌應該是獨立的:特別是,索引 AM 應該能夠表示它支援 include 欄位,而不一定需要支援多個索引鍵欄位。included-columns 修補程式在這方面出錯了,可能是因為它沒有費心更新文件。在這裡,澄清一些關於 amcanreturn 的文字,它對 amcanreturn 報告只有部分索引欄位可返回時應該發生什麼情況有些含糊不清。在審閱 SP-GiST included-columns 修補程式時注意到,它非常不正確(且不安全)地將 SP-GiST 更改為聲稱 amcanmulticol = true 作為此錯誤的解決方案。回溯修補至引入 include 欄位的 v11。https://git.postgresql.org/pg/commitdiff/29d29d652f0be47dc42fa9d667dee5b8e1baa18a
在一個 ICU 函式呼叫中使用 "true" 而不是 "TRUE"。這顯然在 commit 6337865f3 中被遺漏了,它通常在所有地方執行 s/TRUE/true/。到目前為止它逃脫了注意,因為 ICU 68 之前的 ICU 版本提供了 "TRUE" 和 "FALSE" 的定義。使用 ICU 68,它無法編譯。根據 Condor 的報告。回溯修補至引入 6337865f3 的 v11。(我沒有測試 v10,此呼叫源自此處,但我認為它很好,因為我們當時在 c.h 中定義了 TRUE。)討論:https://postgr.es/m/7a6f3336165bfe3ca66abcda7966f9d0@stz-bg.com https://git.postgresql.org/pg/commitdiff/ad84ecc98d7e2ad81567094b8a6910b5078927a7
不要在 satisfies_hash_partition() 的錯誤情況下傳回 NULL。由於此函式用作 CHECK 限制條件,因此傳回 NULL 等同於傳回 TRUE,這將導致允許不滿足雜湊條件的列進入。誠然,這樣做的情況在實踐中應該是無法訪問的,但這並不能減少它是一個壞主意。它也似乎使用了一個飛鏢板來決定哪些錯誤情況應該拋出錯誤而不是傳回 NULL。對於 NULL 輸入值的檢查,我只是將其切換為傳回 false。有一些論點認為錯誤會更好;但這種情況在生成的雜湊約束中確實不應該發生,因此可能不值得編寫更多程式碼。對於父關係開啟失敗的情況,我們似乎不妨讓 relation_open 拋出錯誤,而不是出現無法診斷的約束失敗。回溯修補至引入此程式碼的 v11。討論:https://postgr.es/m/24067.1605134819@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/4025e6c46620048804467d2ad29d31aa9ba50387
在完全建立 VFD 條目之前,請勿 Insert() 它。否則,如果啟用 FDDEBUG,則偵錯輸出將失敗,因為它嘗試讀取 fileName,該檔案尚未設定(實際上應該始終為 NULL)。據我所知,自 Berkeley 以來,這一直是錯誤的。在 96bf88d52 之前,在 snprintf() 對於傳遞給 %s 的 NULL 指標具有容錯性的平台上,它會意外地崩潰;但 intended to be included in the debug output 的檔案名稱永遠不會顯示。Greg Nancarrow 報告並修復。雖然這僅在自訂建置中可見地損壞,但似乎仍然值得回溯修補至所有支援的分支,因為 FDDEBUG 程式碼目前幾乎沒有用。討論:https://postgr.es/m/CAJcOf-cUDgm9qYtC_B6XrC6MktMPNRby2p61EtSGZKnfotMArw@mail.gmail.com https://git.postgresql.org/pg/commitdiff/2bd49b493a52f0a21bc3fc51c355963f99ac1a4e
CREATE TABLE LIKE 的更多修正:處理自我參照 FK。Commit 502898192 對 expandTableLikeClause 產生的其他 ALTER TABLE 操作的執行順序過於粗心。它只是將它們全部放在末尾,這對於大多數目的來說似乎還可以。但是在 LIKE 匯入主鍵或唯一索引,並且外部 CREATE TABLE 包括需要依賴該索引的 FOREIGN KEY 限制時,它會失效。儘管這很奇怪,但它過去可以正常工作,因此我們應該保持它的正常工作。為了修正,使 parse_utilcmd.c 將 LIKE 子句插入到轉換後的命令清單中,索引建立和 FK 建立命令之間,並更改 utility.c,以便 expandTableLikeClause 產生的命令立即執行,而不是在結尾執行。可以想像這種方法也不起作用的情況;但目前 expandTableLikeClause 僅建立欄位預設表示式、CHECK 限制和索引,並且此排序對於這些情況來說似乎還可以。根據 Sofoklis Papasofokli 的錯誤 #16730。與之前的修補程式一樣,回溯修補至所有支援的分支。討論:https://postgr.es/m/16730-b902f7e6e0276b30@postgresql.org https://git.postgresql.org/pg/commitdiff/97390fe8a6e96a153e59b0180f4303acaeb75b84
移除未記錄的 IS [NOT] OF 語法。此功能很久以前就加入了,分別在 7c1e67bd5 和 eb121ba2c 這兩個提交中,但從未以任何面向使用者的方式記錄下來。(在 6126d3e70 中加入的文件幾乎立刻就被註解掉了,在 8272fc3f7 中。)這是因為,雖然此語法是由 SQL:99 定義的,但我們的實作方式僅與標準的語意略有相關。標準似乎打算進行執行時而非解析時的測試,並且明確表示測試應該理解子類型關係。在過去的這些年中,沒有人主動修復這個問題,但人們不斷遇到這段程式碼,並詢問為什麼它沒有被記錄下來。我們直接移除它吧:如果有人想按照規格實現它,他們可以輕鬆地從我們的 git 歷史記錄中恢復仍然有價值的程式碼部分。如果有人實際在使用它,儘管它沒有被記錄下來,他們可以切換到使用 pg_typeof() 來代替,例如 "pg_typeof(something) = 'mytype'::regtype"。這給了與我們的 IS OF 程式碼所做的基本相同的語意。(上次討論這個問題時,我們沒有這個函數,否則我們當時就會移除 IS OF 了。) 討論: https://postgr.es/m/CAKFQuwZ2pTc-DSkOiTfjauqLYkNREeNZvWmeg12Q-_69D+sYZA@mail.gmail.com 討論: https://postgr.es/m/BAY20-F23E9F2B4DAB3E4E88D3623F99B0@phx.gbl 討論: https://postgr.es/m/3E7CF81D.1000203@joeconway.com https://git.postgresql.org/pg/commitdiff/926fa801ac9eb54c5275472271ec63a059904698
在 macOS 上,在連結步驟以及編譯步驟中使用 -isysroot。我們之前只將 -isysroot 開關放入 CPPFLAGS 中,認為只需要它來找到正確的 include 檔案副本。但是,似乎我們在連結程式時也需要使用它,以找到正確的程式庫 stub ".tbd" 檔案。到目前為止,我們都沒有遇到問題,但顯然這主要是運氣好。也可能只有當 Xcode 版本與主機 macOS 版本明顯不同步時才會觀察到故障;目前促使採取行動的情況是,在使用最新 Xcode (12.2) 在 macOS Catalina 上建置失敗,即使在 Big Sur 上沒問題。因此,也將 -isysroot 添加到 LDFLAGS 中。(似乎更常見的做法是將其放入 CFLAGS 中,這樣它將同時包含在編譯和連結步驟中。但是,如果不混淆 configure 選擇預設 CFLAGS 的邏輯,我們就無法在平台範本檔案中修改 CFLAGS。)這應該進行回溯修補,但首先讓我們看看 buildfarm 是否喜歡 HEAD 上的版本。 由 James Hilliard 報告和修補(我做了一些外觀上的修改)討論: https://postgr.es/m/20201120003314.20560-1-james.hilliard1@gmail.com https://git.postgresql.org/pg/commitdiff/49407dc32a2931550e4ff1dea314b6a25afdfc35
稍微擴展幾何迴歸測試案例。向 "point_tbl" 添加另一個邊緣案例值,並為 line(point, point) 函數添加一個測試。這裡暴露的一些行為是錯誤的,但單獨提交此內容的想法是為了記錄我們得到的結果,並允許更容易地檢查即將到來的修補程式所引起的行為變更。 Kyotaro Horiguchi(我添加了 line() 測試)討論: https://postgr.es/m/CAGf+fX70rWFOk5cd00uMfa__0yP+vtQg5ck7c2Onb-Yczp0URA@mail.gmail.com https://git.postgresql.org/pg/commitdiff/a45272b25d6fc8f96793623545fc1f836ac39d94
修復 FPeq() 及其相關函數,以獲得無限的正確答案。"FPeq(infinity, infinity)" 返回 false,因為當它減去兩個輸入時得到 NaN。透過添加單獨的精確相等性檢查來修復此問題。對於兩個符號相同的無窮大,FPle() 和 FPge() 也同樣得到錯誤的答案。在這些情況下,我們可以簡單地重新排列比較,以避免可能減去無窮大。雖然同級函數 FPne() 等即使使用內部 NaN 結果也意外地給出了正確的答案,但最好對它們進行類似的調整,以避免依賴它。 FPeq() 必須轉換為內聯函數,以避免對其引數進行雙重評估,並且為了保持一致性,我對其他函數也做了同樣的操作。順便說一句,簡化 line_eq() 和 point_eq_point() 中 NaN 案例的處理,使其更容易推理,並且可能更快。這導致只有一個可見的迴歸測試變更:slope() 現在給出 (inf,1e300) 兩個輸入的 DBL_MAX,這與它對 (1e300,inf) 的處理方式一致,所以這似乎是一個錯誤修復。 討論: https://postgr.es/m/CAGf+fX70rWFOk5cd00uMfa__0yP+vtQg5ck7c2Onb-Yczp0URA@mail.gmail.com https://git.postgresql.org/pg/commitdiff/8597a48d01b6cc0b09ff626253ac93c67e5516d5
在 geo_ops.c 中,將無限斜率表示為 Infinity,而不是 DBL_MAX。由於我們現在假設使用 IEEE 浮點數,因此似乎沒有理由不這樣做。它的優點是,當由於存在 Inf 座標而將斜率計算為無窮大時,我們從 line_construct() 獲得了比以前更合理的行為,進而在某些相關操作(例如尋找最近點)中也獲得了更合理的行為。同時修復 line_construct() 以特殊處理斜率為零的情況。先前的程式碼在大多數情況下都得到了正確的答案,但是當該點具有 Inf 座標時,它可能會將 C 計算為 NaN。 討論: https://postgr.es/m/CAGf+fX70rWFOk5cd00uMfa__0yP+vtQg5ck7c2Onb-Yczp0URA@mail.gmail.com https://git.postgresql.org/pg/commitdiff/9fe649ea295f00baf6d0f0c1f9b0cb1298f64fb9
Michaël Paquier 推送
放寬 CTAS 和 WITH NO DATA 的具體化檢視所需的 INSERT 權限。如果指定了 WITH NO DATA,則不會將任何資料插入到建立的關係中,因此跳過檢查插入權限。使用 WITH DATA 或 WITH NO DATA 時,使用者始終需要在關係的目標架構上擁有 CREATE 權限。請注意,自 874fe3ae 起,普通的 CREATE TABLE AS 或 CREATE MATERIALIZED VIEW 查詢已經開始在沒有 INSERT 權限檢查的情況下意外地工作,而使用 EXECUTE 或 EXPLAIN ANALYZE 將會因 ACL 檢查而失敗,因此這使得所有命令風格的行為彼此一致。這可以說是一個錯誤修復,但目前對這種行為沒有任何抱怨,因此穩定的分支沒有被更改。同時,正確記錄每個命令的權限要求,並為所有可能的場景添加更多測試,並避免在使用 WITH NO DATA 時進行無用的大量插入分配。 作者:Bharath Rupireddy 審閱者:Anastasia Lubennikova, Michael Paquier 討論: https://postgr.es/m/CALj2ACWc3N8j0_9nMPz9wcAUnVcdKHzFdDZJ3hVFNEbqtcyG9w@mail.gmail.com https://git.postgresql.org/pg/commitdiff/846005e4f3829c3eafe1f8441b80ff90657d0a29
在 psql 中為 CREATE [OR REPLACE] TRIGGER 添加 tab 鍵自動完成功能。 92bf7e2 添加了對此語法的支援。 作者:Noriyoshi Shinoda 討論: https://postgr.es/m/TU4PR8401MB115244623CF4724DCA0D507FEEE30@TU4PR8401MB1152.NAMPRD84.PROD.OUTLOOK.COM https://git.postgresql.org/pg/commitdiff/bf0aa7c4b83bcf3116c5a3c191bbc677ab3beb59
改善 pg_dump 中陣列解析的故障檢測。與 3636efa 類似,pg_dump 在從目錄解析陣列值時所做的檢查過於寬鬆。在記憶體壓力下,可能會(儘管非常不可能)完成一些遺漏資料的轉儲,例如: - 索引的統計資訊 - 函數的執行時配置 - 擴充功能的配置 - 訂閱的發布清單由於這在實務上不會成為問題,因此沒有進行回溯修補。例如,如果 OOM 導致陣列解析失敗,則由於記憶體壓力,pg_dump 的後續程式碼路徑很可能會報錯,顯示分配失敗。 作者:Michael Paquier 審閱者:Daniel Gustafsson 討論: https://postgr.es/m/20201111061319.GE2276@paquier.xyz https://git.postgresql.org/pg/commitdiff/13b58f8934e6252868231c3493d49b8c2b363e5d
移除 CTAS 和具體化檢視表 (matview) 建立時的 INSERT 權限檢查。根據 Peter Eisentraunt 的討論,SQL 標準規定在 CREATE TABLE AS 中執行的任何元組插入,都不需要額外的 ACL 檢查,因此在使用 WITH DATA 時保留 INSERT 權限檢查沒有太多意義。具體化檢視表不屬於標準的一部分,但類似地,此檢查可能會令人困惑,因為它指的是對在與將資料插入該表的相同命令中建立的表進行的存取檢查。此提交移除了 WITH DATA(預設值)的 INSERT 權限檢查,846005e 先前部分移除了該檢查,但僅針對 WITH NO DATA。作者:Bharath Rupireddy 討論:https://postgr.es/m/d049c272-9a47-d783-46b0-46665b011598@enterprisedb.com https://git.postgresql.org/pg/commitdiff/878f3a19c6c8ff197e4a33f51d921a4abafcc494
Alexander Korotkov 推送
Fujii Masao 推送
使待機伺服器 (standby server) 迅速處理中斷信號。此提交更改了待機伺服器中的啟動過程,使其在等待鎖存器上的 wal_retrieve_retry_interval 並重置後,再處理中斷信號,然後再進入另一個鎖存器上的等待。此變更使待機伺服器能夠迅速處理中斷信號。否則,先前存在一種情況,即當啟動過程正在等待鎖存器上的 wal_retrieve_retry_interval 時,如果收到關閉請求,待機伺服器需要額外等待五秒鐘才能關閉。作者:Fujii Masao,但實作想法來自 Soumyadeep Chakraborty 審閱人:Soumyadeep Chakraborty 討論:https://postgr.es/m/9d7e6ab0-8a53-ddb9-63cd-289bcb25fe0e@oss.nttdata.com https://git.postgresql.org/pg/commitdiff/2945a488a3426838223a637cd326ec71fff61954
當 restore_command 成功但已封存檔案還原失敗時,發出日誌。先前,當 restore_command 聲稱成功但未能以正確的名稱還原檔案時,例如,由於 restore_command 的錯誤配置,沒有報告任何日誌訊息。然後,恢復稍後失敗,並出現與該問題沒有直接關係的錯誤訊息。此提交變更了恢復,以便在此錯誤情況下發出日誌訊息。這將使我們能夠更容易地調查這種情況下發生的事情。作者:Jeff Janes, Fujii Masao 審閱人:Pavel Borisov, Kyotaro Horiguchi 討論:https://postgr.es/m/CAMkU=1xkFs3Omp4JR4wMYWdam_KLuj6LXnTYfU8u3T0h=PLLMQ@mail.gmail.com https://git.postgresql.org/pg/commitdiff/a4ef0329c27156dca81714854599e7d82becb17f
Peter Eisentraut 推送
移除處理已移除的過時包含運算符的程式碼。這移除了用於處理 2f70fdb0644c32c4154236c2b5c241bec92eac5e 移除的運算符的程式碼。討論:https://postgres.tw/message-id/flat/20201027032511.GF9241@telsasoft.com https://git.postgresql.org/pg/commitdiff/591d282e8d3e0448ec1339c6b066e10953f040a2
標準化空語法規則中的註解。將小寫 / empty / 更改為 / EMPTY /,以與大多數保持一致。討論:https://postgres.tw/message-id/flat/e9eed669-e32d-6919-fed4-acc0daea857b%40enterprisedb.com https://git.postgresql.org/pg/commitdiff/5664b7be5b2c2e756372e7dde7c187a11a5ab701
從 BRIN 程式碼中移除未使用的和已棄用的策略編號。這些是無效程式碼。討論:https://postgres.tw/message-id/flat/20201027032511.GF9241@telsasoft.com https://git.postgresql.org/pg/commitdiff/d93ccdea1d447ab7e8c48797153ce58b051f1a37
為雜湊 (hashing) 和基於雜湊的計劃添加更多測試。- 測試不可雜湊元素類型的陣列的雜湊。- 測試具有基於雜湊和基於排序的計劃的 UNION [DISTINCT]。(先前,僅在此處測試了 INTERSECT 和 EXCEPT。)- 測試具有不可雜湊列類型的 UNION [DISTINCT]。即使 enable_hashagg 開啟,這目前也會恢復為基於排序的計劃。- 使用陣列作為列類型,測試 UNION/INTERSECT/EXCEPT 基於雜湊和基於排序的計劃。也測試具有不可雜湊元素類型的陣列。- 使用 row 類型作為列類型,以類似方式測試 UNION/INTERSECT/EXCEPT。目前,這僅使用基於排序的計劃,因為沒有對 row 類型的雜湊支援。- 添加一個測試案例,顯示使用 UNION [DISTINCT] 的遞迴查詢需要可雜湊的列類型。- 添加一個目前失敗的測試,該測試在使用 row 類型作為列類型的迴圈偵測使用案例中使用 UNION DISTINCT。討論:https://postgres.tw/message-id/flat/38eccd35-4e2d-6767-1b3c-dada1eac3124%402ndquadrant.com https://git.postgresql.org/pg/commitdiff/6dd8b00807871bfd0c3ce8e18fd1f6ba1a71fbf9
對 row 類型的雜湊支援。為記錄類型添加雜湊函數,以及記錄類型的雜湊運算符族和運算符類別。這啟用了記錄類型的所有雜湊功能,例如用於 UNION/INTERSECT/EXCEPT DISTINCT 的基於雜湊的計劃、使用 UNION DISTINCT 的遞迴查詢、雜湊聯結和雜湊分割。審閱人:Tom Lane tgl@sss.pgh.pa.us 討論:https://postgres.tw/message-id/flat/38eccd35-4e2d-6767-1b3c-dada1eac3124%402ndquadrant.com https://git.postgresql.org/pg/commitdiff/01e658fa74cb7e3292448f6663b549135958003b
重新命名測試中的物件以避免衝突。在 01e658fa74cb7e3292448f6663b549135958003b 中,hash_func 測試建立了一個類型 t1,但顯然,並行運行的測試也可能會使用該名稱,具體取決於時間安排。重新命名該類型以避免該問題。https://git.postgresql.org/pg/commitdiff/afaccbba787d5f1470c44ddd61c9ddaaad19e27e
將巨集替換為函數。使用巨集在這裡既難看又沒有道理。討論:https://postgres.tw/message-id/flat/4ad69a4c-cc9b-0dfe-0352-8b1b0cd36c7b@2ndquadrant.com https://git.postgresql.org/pg/commitdiff/b5acf10cfc63ed1e0bc4eef466c0f4670a725ef3
doc: 改善 tableoid 描述。提及它對於確定分割表以及繼承層次結構中的表的表名非常有用。作者:Ian Lawrence Barwick barwick@gmail.com 審閱人:Ashutosh Bapat ashutosh.bapat.oss@gmail.com 討論:https://postgres.tw/message-id/flat/CAB8KJ=gFmBXP=P9htziOj+WM5PDAK4qc7iGQta+8kUh306kQnw@mail.gmail.com https://git.postgresql.org/pg/commitdiff/a47834db0fb70256e676862f1d96374a9e114d82
Álvaro Herrera 推送
修正錯字。在 90fdc259866e 中引入;反向移植到 12。作者:Erik Rijkers er@xs4all.nl 討論:https://postgr.es/m/e92b3fba98a0c0f7afc0a2a37e765954@xs4all.nl https://git.postgresql.org/pg/commitdiff/bcbd7713324798d5a74ca640c6cf6c439bda22e4
將 PGPROC->vacuumFlags 重新命名為 statusFlags。由於有更多與 PGPROC 條目相關聯的標誌與 vacuum 無關(目前存在或已規劃),因此名稱 "statusFlags" 更能描述其用途。(對應的 mirroring PROC_HDR->vacuumFlags 也進行了相同的操作。)此提交沒有功能上的變更。這個想法首先由 Hari Babu Kommi 在 [1] 中提出,然後由 Michael Paquier 在 [2] 中提出。[1] https://postgr.es/m/CAJrrPGcsDC-oy1AhqH0JkXYa0Z2AgbuXzHPpByLoBGMxfOZMEQ@mail.gmail.com [2] https://postgr.es/m/20200820060929.GB3730@paquier.xyz 作者:Dmitry Dolgov 9erthalion6@gmail.com 審閱者:Álvaro Herrera alvherre@alvh.no-ip.org 討論:https://postgr.es/m/20201116182446.qcg3o6szo2zookyr@localhost https://git.postgresql.org/pg/commitdiff/cd9c1b3e197a9b53b840dcc87eb41b04d601a5f9
indexcmds.c:重新排序函數原型。 ... 或許是出於過於整潔癖的緣故。https://git.postgresql.org/pg/commitdiff/7684b6fbed3a0770a0d8fdcbb5cf8b61394de691
放寬設定 PGPROC->statusFlags 的鎖定層級。我們實際上不需要鎖定來設定 PGPROC->statusFlags 本身;我們需要的是 XidGenLock 或 ProcArrayLock 的共享鎖定,以確保 MyProc->pgxactoff 在我們修改 ProcGlobal->statusFlags 中的鏡像陣列時保持靜止。有些地方為此使用了獨佔鎖定,這是不必要的。將這些放寬為僅使用共享鎖定。procarray.c 有幾個地方對 PGPROC 變更做了一些脆弱的假設:ProcArrayEndTransaction 僅使用共享鎖定,因此僅允許變更 MyProc。另一方面,ProcArrayEndTransactionInternal 也會變更其他程序,因此必須持有獨佔鎖定。新增斷言以確保這些假設繼續成立。作者:Álvaro Herrera alvherre@alvh.no-ip.org 審閱者:Michael Paquier michael@paquier.xyz 討論:https://postgr.es/m/20201117155501.GA13805@alvherre.pgsql https://git.postgresql.org/pg/commitdiff/27838981be9de35d54ffcdc6cc06b5d5ea9e0cee
Bruce Momjian 推送
doc:改善 exp. 索引分析需求的措辭。這是對 3370207986 的後續提交。報告者:Justin Pryzby 討論:https://postgr.es/m/20201112211143.GL30691@telsasoft.com 向後移植:9.5 https://git.postgresql.org/pg/commitdiff/481f9dc3dc2fc779af3ab2d58216a1c2b970b20f
doc:闡明如何在安裝樹中找到 pg_type_d.h。是對 patch 152ed04799 的後續行動。報告者:Alvaro Herrera 討論:https://postgr.es/m/20201112202900.GA28098@alvherre.pgsql 向後移植:9.5 https://git.postgresql.org/pg/commitdiff/8ad06bcbe136360296a804da7d7631a78fd15e70
doc:更新 bgwriter 的描述。這清楚地說明了 bgwriter 的確切作用,這應有助於調整。報告者:Chris Wilson 討論:https://postgr.es/m/160399562040.7809.7335281028960123489@wrigleys.postgresql.org 向後移植:9.5 https://git.postgresql.org/pg/commitdiff/62b50ad698f8a789f92177ad72639f99d94d7d78
Amit Kapila 推送
Peter Geoghegan 推送
nbtree:重新命名 nbtinsert.c 變數以保持一致性。停止在沒有意義的上下文中將特殊區域/不透明指標變數命名為 'lpageop'。這是從執行現在分佈在 _bt_insertonpg()、_bt_findinsertloc() 和 _bt_split() 中的任務的邏輯更加集中的時代遺留下來的。 'lpageop' 表示“左頁”,這在沒有右頁的上下文中沒有意義。此外,在 _bt_insertonpg() 中預先取得頁面標誌變數。這使其更接近重構提交 bc3087b626d 之後的 _bt_split()。這允許頁面分割和零售插入路徑都使用相同的變數。https://git.postgresql.org/pg/commitdiff/a034f8b60c6e9afd75f42dc420a76cb9d3875fcb
棄用 nbtree 的 BTP_HAS_GARBAGE 標誌。簡化我們在 nbtinsert.c 中避免頁面分割的各種策略的處理。當葉頁看起來即將溢出時,我們現在在一個中心位置執行刪除 LP_DEAD 項目和重複資料刪除。這大大簡化了 _bt_findinsertloc()。這有一個獨立有用的結果:nbtree 不再依賴 BTP_HAS_GARBAGE 頁面級別標誌/提示來做任何重要的事情。我們仍然以與以前相同的方式設定和取消設定該標誌,但在考慮是否應檢查已設定的 LP_DEAD 位時,不再將其視為閘控條件。這發生在頁面看起來可能必須分割的時候,因此僅僅順便檢查 LP_DEAD 位幾乎是免費的。這樣可以避免遺漏 LP_DEAD 位,只是因為頁面級別提示未設定,這可能是相當普遍的(例如,當 VACUUM 取消設定頁面級別標誌而不實際刪除最近設定了 LP_DEAD 位的索引元組時,就會發生這種情況,在 VACUUM 操作開始之後但在它到達有問題的葉頁之前)。請注意,與 PostgreSQL 13 相比,這不是一個很大的行為變更。無論 BTP_HAS_GARBAGE 頁面級別標誌是否設定,我們都已經在檢查是否設定了 LP_DEAD 位,然後才考慮執行重複資料刪除過程。此提交僅稍微進一步,對所有索引執行相同的檢查,甚至是不會執行重複資料刪除的索引。我們不會完全刪除 BTP_HAS_GARBAGE 標誌。我們仍然將其作為從 B-tree 版本 4/PostgreSQL 12 之前的 pg_upgrade 索引的閘控條件。這是合理的,因為在插入具有 pre version 4 索引的元組時,我們有時必須在充滿重複項的頁面之間做出選擇。在那裡避免存取頁面的行指標陣列可能仍然值得,因為目前尚不清楚我們是否會插入到有問題的頁面,更不用說因此分割它。作者:Peter Geoghegan pg@bowt.ie 審閱者:Victor Yegorov vyegorov@gmail.com 討論:https://postgr.es/m/CAH2-Wz%3DYpc1PDdk8OVJDChGJBjT06%3DA0Mbv9HyTLCsOknGcUFg%40mail.gmail.com https://git.postgresql.org/pg/commitdiff/cf2acaf4dcb5e20204dcec4d698cb4478af533e7
Heikki Linnakangas 推送
docs:闡明訊號函數沒有回饋。錯誤 #16652 抱怨 pg_reload_conf() 傳回 true,即使組態檔包含錯誤。按照設計,pg_reload_conf() 就是這樣工作的,但文件對此不太清楚。闡明 'true' 傳回值僅表示訊號已成功傳送。另外,新增可用於檢查組態檔是否錯誤的系統檢視的連結。David G. Johnston,經過我的一些改寫。討論:https://postgres.tw/message-id/CAKFQuwax6GxhUQEes0D045UtXG-fBraM39_6UMd5JyR5K1HWCQ%40mail.gmail.com https://git.postgresql.org/pg/commitdiff/dfab7f2f94812c6c3a62cfde0ec7f9e447132e64
在 EXPLAIN-only 模式下,跳過分配雜湊表。作者:Alexey Bashtanov 討論:https://postgres.tw/message-id/36823f65-050d-ae24-aa4d-a37726998240%40imap.cc https://git.postgresql.org/pg/commitdiff/2cccb627f10d5dd4c21806fa251e4fb61eadd28c
讓 pg_rewind 測試案例更穩定。如果因為某些原因,複製速度異常緩慢,pg_rewind 可能會在測試資料列被複製之前執行。增加顯式等待。回報者:Andres Freund 討論:https://postgres.tw/message-id/20201120003811.iknhqwatitw2vvxf%40alap3.anarazel.de https://git.postgresql.org/pg/commitdiff/c71f9a094b32770dcd34b9ba4909435e34583747
Thomas Munro 推送了
新增 BarrierArriveAndDetachExceptLast()。提供一種方式讓一個程序單獨繼續(先前)並行計算的剩餘階段。稍後的修補程式將使用此功能來擴展 Parallel Hash Join。作者:Melanie Plageman melanieplageman@gmail.com 審閱者:Thomas Munro thomas.munro@gmail.com 討論:https://postgr.es/m/CA%2BhUKG%2BA6ftXPz4oe92%2Bx8Er%2BxpGZqto70-Q_ERwRaSyA%3DafNg%40mail.gmail.com https://git.postgresql.org/pg/commitdiff/7888b0999488511e4266f2134053fa3a6505a155
為 FreeBSD 新增 collation 版本。在 FreeBSD 13 上,使用 querylocale() 讀取 libc collations 的當前版本。類似於 Windows 的 commit 352f6f2d 和 GNU/Linux 的 d5ac14f9。討論:https://postgr.es/m/CAEepm%3D0uEQCpfq_%2BLYFBdArCe4Ot98t1aR4eYiYTe%3DyavQygiQ%40mail.gmail.com https://git.postgresql.org/pg/commitdiff/ca051d8b101d3205f1c5faf0d1da8a523ffc95a1
Magnus Hagander 推送了
鳥越淳寄來了另一個修補程式版本,以啟用 pg_get_backend_memory_contexts() 來收集任意後端程序的記憶體內容。先前,pg_get_backend_memory_contexts() 只能取得本機記憶體內容。此修補程式能夠取得由引數指定的 PID 的任意後端程序的記憶體內容。
Tomáš Vondra 寄來了兩個修補程式版本,以支援表示式的擴充統計資訊。
Seino Yuki 和 Fujii Masao 交換了修補程式,以向 pg_stat_statements 擴充功能新增一個新的 pg_stat_statements_info 視窗。
Jacob Champion 和 Daniel Gustafsson 交換了修補程式,以支援 NSS 作為 libpq 的 TLS 後端。
Alexandra Pervushina 寄來了另外兩個修補程式版本,以便讓非同步複本等待重播 lsn。
Álvaro Herrera 和 Dmitry Dolgov 交換了修補程式,以從 CREATE INDEX CONCURRENTLY 中移除一個虛假的等待。
Thomas Munro 寄來了兩個修補程式版本,以追蹤共用記憶體中的關係大小,並為 smgrnblocks() 提供一個無鎖的快速路徑。
Masahiro Ikeda 寄來了另一個修補程式版本,以新增一個 track_wal_io_timing GUC 和一個匹配的 pg_stat_wal 視窗來支援它。
Li Japin 寄來了另外四個修補程式版本,以便使用新的 GUC idle_session_timeout 來終止閒置連線,並順便減少呼叫 setitimer() 的次數。
Masahiko Sawada 和 Bertrand Drouvot 交換了修補程式,以在備用恢復衝突期間新增資訊,並使用新的 GUC log_recovery_conflict_waits 控制。
Takamichi Osumi 寄來了另外兩個修補程式版本,以便在資料載入期間不允許 WAL 記錄。
Simon Riggs 寄來了五個修補程式版本,以修復 DISABLE_PAGE_SKIPPING 的文件行為與目前行為不符的情況。
Ajin Cherian 和 Amit Kapila 交換了修補程式,以實作兩階段交易的邏輯解碼。
Tatsuro Yamada 寄來了另外兩個修補程式版本,以新增一個用於擴充統計資訊的 psql 命令 \dX。
Daniel Gustafsson 寄來了另一個修補程式版本,以支援在執行中的叢集中啟用和停用頁面校驗和。
Justin Pryzby 寄來了一個修補程式,允許在引導程式中使用複合類型,並向 pg_statistic_ext_data 新增一個欄位 stxdexpr。
Peter Geoghegan 寄來了另一個修補程式版本,以刪除唯一索引中的舊版本,以避免頁面分割。
Heikki Linnakangas 寄來了另一個修補程式版本,將 copy.c 分割成四個檔案:copy.c,現在包含 COPY FROM 和 COPY TO 共用的函式,copyto.c,包含 COPY TO 的程式碼,copyfrom.c,包含初始化 COPY FROM 的程式碼,以及將 tuple 路由到正確的表格,以及 copyfromparse.c,包含從用戶端/檔案/程式讀取的程式碼,並將輸入文字/CSV/二進位格式解析為 tuple。
David G. Johnston 寄來了另一個修補程式版本,以闡明信號函式沒有回饋的事實。
Simon Riggs 寄來了一個修補程式,新增一個 wal_sessioninfo GUC,當開啟時,會將有關用戶端連線的資訊新增到每個 commit 或 abort 記錄中。
David G. Johnston 寄來了一個修補程式,以闡明 libpq 中批次/管道支援的文件。
Dean Rasheed 寄來了另一個修補程式版本,以改善 OR 子句的估計。
Heikki Linnakangas 寄來了一個修補程式,使 ResourceOwner 實作更有效率,並向外部程式碼公開更方便的介面。
Aleksey Kondratov 寄來了一個修補程式,向 PostgreSQL FDW 新增一個自訂 GUC,以控制它是否嘗試保持連線,其名稱令人驚訝地為 keep_connections。
Takayuki Tsunakawa 和 Tomáš Vondra 交換了修補程式,以實作 PostgreSQL FDW 的 INSERT 批次處理。
Justin Pryzby 和 Pavel Stěhule 交換了修補程式,以向 pg_dump 新增一個 --filter 選項,該選項從指定要使用的過濾器的檔案中提取,並使引數解析對命令列和如此描述的檔案都可用。
Bharath Rupireddy 寄來了另一個修補程式版本,以在 autoprewarm 模組中使用標準 SIGHUP 和 SIGTERM 處理程式。
Etsuro Fujita 寄來了另一個修補程式版本,以在 postgres_fdw 節點上啟用非同步附加。
Tomáš Vondra 寄來了一個修補程式,修復了一個錯誤,該錯誤表現為增量排序透過將 is_parallel_safe 檢查新增到 get_useful_pathkeys_for_relation() 來變更查詢行為。
David Pirotte 寄來了另一個修補程式版本,在串流時將 xid 新增到訊息,並向 pgoutput 輸出外掛程式新增一個 "messages" 選項。當 "messages" 為 true 時,邏輯解碼訊息(即透過 pg_logical_emit_message 產生)會傳送到插槽消費者。
Junfeng (Jerome) Yang 寄來了另一個修補程式版本,透過將 vac_update_datfrozenxid() 的來源從磁碟堆積表變更為系統快取,來修復 pg_database toast 屬性的 vacuum freeze。
Dmitry Dolgov 送出了一個修補程式,以防止 ArrayExpr 中每個元素的混亂。 這樣做的動機是,pg_stat_statements 會針對類似 SELECT something FROM table WHERE col IN (1, 2, 3, ...) 的查詢產生多個條目,具體取決於參數的數量,因為 ArrayExpr 的每個元素都會被混亂。 如果 Consts 是一系列的一部分並且位置超出指定的閾值,則讓它們不對混亂雜湊做出任何貢獻。 對於具有 VALUES 的類似查詢也做同樣的事情。
Thomas Munro 送出了另一個修訂版的修補程式,以實現 WAL 預取。
Andrew Dunstan 送出了另一個修訂版的修補程式,以允許比對來自客戶端憑證的整個 DN。
Pavel Stěhule 送出了兩個修訂版的修補程式,以將參數和本地變數引用簡寫添加到 PL/pgsql。
Atsushi Torikoshi 送出了兩個修訂版的修補程式,以記錄用於建立快取計畫的統計資訊在更新時,快取計畫將失效的事實。
Atsushi Torikoshi 送出了兩個修訂版的修補程式,以更新 PREPARE 文件,以註明 pg_prepared_statements 現在顯示目前會話中每個預備語句累積選擇通用和自訂計畫的次數。
Vigneshwaran C 送出了另一個修訂版的修補程式,以平行化 COPY。
Thomas Munro 送出了另一個修訂版的修補程式,以最大限度地減少鎖存訊號。
Masahiro Ikeda 送出了另一個修訂版的修補程式,以將統計資訊添加到 pg_stat_wal 視圖,以進行與 wal 相關的參數調整。
Craig Ringer 送出了一個修補程式,用於檢測和報告 LWLockAcquire() 何時由於呼叫者已持有 LWLock 而導致簡單的自我死鎖。
Craig Ringer 送出了一個修補程式,以從 LWLockWaitForVar 中刪除虛假的 lwlock__acquire 追蹤點,將目標 LWLock* 和 tranche ID 傳遞給 LWLock 追蹤點,並將其添加到 LWLock 常式中的追蹤點。
Heikki Linnakangas 送出了另一個修訂版的修補程式,以將 peragg 和 pertrans 重複尋找移動到 prepagg.c。
Craig Ringer 在上面的資源所有者重構修補程式之上送出了一個修補程式,該修補程式新增了一些 systemtap/dtrace 追蹤點,並提供了一個演示 systemtap 腳本,該腳本展示了使用它們完成的一些基本統計資訊收集。
Surafel Temesgen 送出了另一個修訂版的修補程式,以實現系統版本化時態表。
Justin Pryzby 又送出了兩個修訂版的修補程式,以避免 brin 摘要中的錯誤,如果索引同時被重新索引,則可能發生這種情況。
Li Japin 送出了一個使用巨集計算 LWLock 偏移的修補程式。
Kyotaro HORIGUCHI 送出了另一個修訂版的修補程式,以實現 CatCache 過期。
Peter Eisentraut 送出了另一個修訂版的修補程式,以新增對使用符合 SQL 標準的函數主體,為 language SQL 撰寫 CREATE FUNCTION 和 CREATE PROCEDURE 語句的支援。
Greg Nancarrow 送出了另一個修訂版的修補程式,以啟用 "INSERT INTO ... SELECT ..." 的平行 SELECT,以及 "INSERT INTO ... SELECT ..." 的平行 INSERT 和/或 SELECT,如果這樣做是安全的。
Amit Langote 送出了一個修補程式,以便也在分割資料表中建立外部鍵觸發器,以便允許後續的 commit(s) 使用父資料表觸發器而不是分割區的觸發器來觸發某些情況下與外部鍵相關的事件,並在跨分割區更新期間正確強制執行外部鍵。
Laurenz Albe 送出了另一個修訂版的修補程式,以將會話統計資訊添加到 pg_stat_database。
Justin Pryzby 送出了另一個修訂版的修補程式到 pg_restore,以便它分別解析和運行 SQL 命令,並允許獨立還原子分割區,即使父分割區不存在,或者缺少/不相容的欄位。
Peter Eisentraut 送出了另一個修訂版的修補程式,以暫停恢復,因為參數設定不足。
Peter Eisentraut 送出了另一個修訂版的修補程式,以新增對抽象 Unix 網域套接字的支援,並透過僅在 errno == EADDRINUSE 時顯示該提示,使來自 bind() 失敗的錯誤提示更加準確。
Matthias van de Meent 送出了一個修補程式,以修復 CLUSTER 掃描的區塊數量的進度報告。
Stephen Frost 送出了一個修補程式,以將不太準確的「預設角色」術語替換為更精確的「預定義角色」。
Erik Rijkers 在新增關於架構的教學章節的修補程式之上,送出了一個修補程式,以修復一些拼字錯誤並進行其他文字潤飾。
Bharath Rupireddy 送出了另一個修訂版的修補程式,以避免在 CTAS 和 MatView 中檢查 INSERT 權限,以便符合標準。
Gilles Darold 送出了兩個修訂版的修補程式,以新增一個 hook 給外掛程式以在 AbortCurrentTransaction 結束時獲得控制權,以及一個基於相同基礎啟用語句級別回滾的擴展。
Krasiyan Andreev 送出了另一個修訂版的修補程式,以實現視窗函數的 <null treatment>。
Álvaro Herrera 送出了一個修補程式,以修復 pageinspect 中的一個錯誤,該錯誤表現為類似於 ERROR: invalid memory alloc request size 18446744073709551451 的訊息,當頁面被充分破壞時。 修復方法是不嘗試列印資料,而是停止執行。
Justin Pryzby 送出了另一個修訂版的修補程式,以淘汰 pg_standby。
Michaël Paquier 又送出了兩個修訂版的修補程式,以刪除 currtid() 和 currtid2(),並在此過程中清理了一些資料表 AM。
James Coleman 送出了一個修補程式,以強制執行 generate_useful_gather_paths 中 pathkeys 的平行安全性,並確保 generate_useful_gather_paths 不會跳過未排序的子路徑。
Vigneshwaran C 送出了一個 PoC 修補程式,該修補程式可以透過連線到伺服器來取得 PostgreSQL 程序的呼叫堆疊。
Tom Lane 送出了一個修補程式,使「cannot insert」訊息更準確地說明原因是永遠無法插入非預設值。