本週人物:https://postgresql.life/post/marc_linster/
sqlite_fdw 1.3.1 已發布。https://github.com/pgspider/sqlite_fdw
InfluxDB fdw 0.3 已發布 https://github.com/pgspider/influxdb_fdw
griddb_fdw 1.3 已發布。https://github.com/pgspider/griddb_fdw
pg_activity 2.0.0,一個類似 top 的 PostgreSQL 伺服器活動監控應用程式,已發布。https://github.com/dalibo/pg_activity/releases/tag/v2.0.0
https://archives.postgresql.org/pgsql-jobs/2021-01/
Planet PostgreSQL: https://planet.postgresql.org/
本週的 PostgreSQL 每週新聞由 David Fetter 撰寫
請在太平洋標準時間 (PST8PDT) 星期日下午 3:00 前將新聞和公告提交至 david@fetter.org。
Tomáš Vondra 推送
在 COPY FREEZE 中設定 PD_ALL_VISIBLE
和可見性地圖位元。 確保 COPY FREEZE 將頁面標記為 PD_ALL_VISIBLE
並更新可見性地圖。 到目前為止,我們僅將個別元組標記為凍結,但頁面級別標誌未更新,因此 COPY FREEZE 之後的第一次 VACUUM 必須重寫整個表。 這是一個相當舊的修補程式,並且有多個人參與。 第一個版本由 Jeff Janes 編寫,然後由 Pavan Deolasee 和 Anastasia Lubennikova 重新製作。 作者:Anastasia Lubennikova、Pavan Deolasee、Jeff Janes。審閱人:Kuntal Ghosh、Jeff Janes、Tomas Vondra、Masahiko Sawada、Andres Freund、Ibrar Ahmed、Robert Haas、Tatsuro Ishii、Darafei Praliaskouski。討論:https://postgr.es/m/CABOikdN-ptGv0mZntrK2Q8OtfUuAjqaYMGmkdU1dCKFtUxVLrg@mail.gmail.com 討論:https://postgr.es/m/CAMkU%3D1w3osJJ2FneELhhNRLxfZitDgp9FPHee08NT2FQFmz_pQ%40mail.gmail.com https://git.postgresql.org/pg/commitdiff/7db0cd2145f2bce84cac92402e205e4d2b045bf2
psql \dX:列出擴展統計資訊物件。 新命令列出擴展統計資訊物件。 支援所有具有擴展統計資訊的過去版本。 這是 commit 891a1d0bca 的簡化版本,由於未考慮一般使用者無法存取 pg_statistic_ext_data,因此必須還原該版本。 移除了需要存取此目錄的欄位。 可以新增它們,但需要對核心進行更改。 作者:Tatsuro Yamada。審閱人:Julien Rouhaud、Alvaro Herrera、Tomas Vondra、Noriyoshi Shinoda。討論:https://postgr.es/m/c027a541-5856-75a5-0868-341301e1624b%40nttcom.co.jp_1 https://git.postgresql.org/pg/commitdiff/ad600bba0422dde4b73fbd61049ff2a3847b068a
在 postgres_fdw 中實作批量插入的支援。 擴充 FDW API 以允許將插入批次處理到外部表中。 由於每次往返外部伺服器的高延遲,這通常比插入個別列有效得多。 可以在常規 FDW API 中實作類似的功能,但不方便,並且在報告實際插入的列數等方面存在問題。 這使用兩個新函數擴充了 FDW API: * GetForeignModifyBatchSize - 允許 FDW 選擇最佳批次大小 * ExecForeignBatchInsert - 一次插入一批列 目前,只有 INSERT 查詢支援批次處理。 將來可能會新增對 DELETE 和 UPDATE 的支援。 這也實作了 postgres_fdw 的批次處理。 可以在伺服器和表級別使用 "batch_size" 選項指定批次大小。 最初的修補程式版本由我編寫,但由 Takayuki Tsunakawa 以多種方式重寫和改進。 作者:Takayuki Tsunakawa。審閱人:Tomas Vondra、Amit Langote。討論:https://postgr.es/m/20200628151002.7x5laxwpgvkyiu3q@development https://git.postgresql.org/pg/commitdiff/b663a4136331de6c7364226e3dbf7c88bfee7145
修復 ExecInitModifyTable 中 FDW 批次處理的初始化。 ExecInitModifyTable 必須初始化所有結果關係的批次處理,而不僅僅是第一個。 此外,當需要垃圾過濾器時,指標指向超過 mtstate->resultRelInfo
陣列的位置。 根據多個非 x86 動物 (florican、locust, ...) 的報告。 討論:https://postgr.es/m/20200628151002.7x5laxwpgvkyiu3q@development https://git.postgresql.org/pg/commitdiff/920f853dc948b98a5dc96580c4ee011a302e33e4
使用 `CLOBBER_CACHE_ALWAYS 修復 COPY FREEZE
。 這新增了 commit 7db0cd2145 意外省略的程式碼,這導致了兩個後果。 首先,運行 COPY FREEZE 時,只有 heap_multi_insert 插入的列才能如預期凍結,而 heap_insert 則使列保持未凍結狀態。 然而,這包括 TOAST 表中的列,因此可能留下大量未凍結的資料。 其次,在 relcache 失效後,頁面可能部分為空。 這解決了這兩個問題。 討論:https://postgr.es/m/CABOikdN-ptGv0mZntrK2Q8OtfUuAjqaYMGmkdU1dCKFtUxVLrg@mail.gmail.com https://git.postgresql.org/pg/commitdiff/39b66a91bdebb00af71a2c6218412ecfc89a0e13
Heikki Linnakangas 推送
pageinspect:修復 gist_page_items() 中的 relcache 洩漏。 gist_page_items() 函數在第一次呼叫時開啟索引關係,並在最後一次呼叫時關閉它。 但無法保證函數會運行到完成,從而導致 relcache 洩漏和交易結束時的警告。 為了修復,重構該函數以一次性傳回所有列,作為 tuplestore。 報告者:Tom Lane。討論:https://postgres.tw/message-id/234863.1610916631%40sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/04eb75e783ba49ca2e0e75088d6590b64be8ed4d
檢查 gist_page_items 中 BuildIndexValueDescription 是否傳回 NULL。 根據 Coverity。 BuildIndexValueDescription() 實際上無法在此實例中傳回 NULL,因為只有在使用者沒有所需權限時才會傳回 NULL,並且此函數只能由超級使用者使用。 但安全總比後悔好。 https://git.postgresql.org/pg/commitdiff/5d1e5c8b758770186b005a1c3888b05e37af79c5
修復在 GiST 插入中檢測並行頁面分割的錯誤。 在 commit 9eb5607e699 中,我錯誤地設定了檢查分割或刪除頁面的條件:我使用了 && 而不是 ||。 註解正確地說 "並行分割 或 刪除"。 因此,GiST 插入可能會錯過並行分割,並插入到錯誤的頁面。 Duncan Sands 使用一個執行大量並行插入的測試腳本證明了這一點。 回溯到引入此功能的 v12。 需要 REINDEX 來修復受此錯誤影響的索引。 回溯:12。報告者:Duncan Sands。討論:https://postgres.tw/message-id/a9690483-6c6c-3c82-c8ba-dc1a40848f11%40deepbluecap.com https://git.postgresql.org/pg/commitdiff/6b4d3046f422c2682365924b515c7588d5a3e651
doc: 編輯「PostgreSQL 內部結構概觀」章節。將部分句子改寫得更簡潔。將 postmaster 程序稱為「postmaster」,而非「postgres」。原本寫的是「postmaster process」,但在 commit 5266f221a2 中,我們合併了「postmaster」和「postgres」指令,且「postmaster」變成僅是個符號連結時,被改為「postgres process」。這是過度熱心的搜尋與取代所致,因為該程序仍然稱為「postmaster」。作者:Erik Rijkers 和 Jürgen Purtz 討論:https://postgres.tw/message-id/aa31f359-1168-ded5-53d0-0ed228bfe097%40iki.fi https://git.postgresql.org/pg/commitdiff/29ad6595ef7f568ca11dd9219c0d23048bdda513
Michaël Paquier 推送了
重構 CLUSTER、REINDEX 和 VACUUM 的選項處理。此舉延續了 b5913f6 中所做的工作。這些指令的所有選項都改為使用十六進位值,而不是枚舉,以降低引入新選項時產生相容性錯誤的風險。每個選項集都移至一個新的結構中,該結構可以用更多非布林選項來擴充(VACUUM 已經是這種情況)。REINDEX 的程式碼經過重組,因此手動 REINDEX 指令會透過 utility.c 中的單一常式,就像 VACUUM 一樣,以簡化當指令需要經過多個交易時的選項參數分配處理。這可用作與這些指令相關的未來修補程式的基礎架構,包括重新索引篩選和表空間支援。根據與下面提到的人員以及 Alvaro Herrera 和 Peter Eisentraut 的討論。作者:Michael Paquier、Justin Pryzby 審閱人:Alexey Kondratov、Justin Pryzby 討論:https://postgr.es/m/X8riynBLwxAD9uKk@paquier.xyz https://git.postgresql.org/pg/commitdiff/a3dc926009be833ea505eebd77ce4b72fe708b18
修正 ALTER DEFAULT PRIVILEGES 中重複物件的問題。在此指令中指定重複的物件會導致 pg_default_acl 中的唯一約束違規或「tuple already updated by self」錯誤。與 GRANT/REVOKE 類似,在每次子指令處理後遞增指令 ID,以允許此案例透明地運作。新增了一個迴歸測試,方法是調整 privileges.sql 的現有查詢之一來強調此案例。回報人:Andrus 作者:Michael Paquier 審閱人:Álvaro Herrera 討論:https://postgr.es/m/ae2a7dc1-9d71-8cba-3bb9-e4cb7eb1f44e@hot.ee 向後移植:9.5 https://git.postgresql.org/pg/commitdiff/21378e1fefedcaed3d855ae7aa772555295d05d6
為 DROP OWNED BY 新增預設 ACL 的迴歸測試。DROP OWNED BY 有一個特定的程式碼路徑,用於在清理現有測試沒有涵蓋的共享依賴項時,移除儲存在 pg_default_acl 中的 ACL。在深入研究 21378e1 修復的錯誤時發現了此問題。由於 ALTER DEFAULT PRIVILEGES 會影響在預設權限可見時建立的所有物件的 ACL,因此測試使用交易回滾來隔離測試,並避免與並行執行的其他會話產生任何影響。審閱人:Álvaro Herrera 討論:https://postgr.es/m/YAbQ1OD+3ip4lRv8@paquier.xyz https://git.postgresql.org/pg/commitdiff/a36dc04d424a6bfa03ee2cf75c85a6b7f9697e70
將 MSVC 腳本中的「cl /?」切換為「cl /help」以進行平台偵測。如果在真實或虛擬磁碟機上執行「cl /?」,則會產生不同的輸出(可以使用簡單的 subst 指令進行設定),如果在虛擬磁碟機上建置,則會導致 MSVC 腳本發生錯誤,因為無法偵測要使用的平台。相反地,如果在真實或虛擬磁碟機上使用「cl /help」,則會產生一致的輸出。改為使用「/help」可讓編譯在虛擬磁碟機上運作,只要程式碼儲存庫的頂部是磁碟機的一部分,而不會影響真實磁碟機上的建置。回報人:Robert Grange 作者:Juan José Santamaría Flecha 討論:https://postgr.es/m/16825-c4f104bcebc67034@postgresql.org https://git.postgresql.org/pg/commitdiff/733d670073efd2c3a9df07c225006668009ab793
將 SSL 資訊回呼提前以擷取更多資訊。用於檢索連線設定期間的狀態變更資訊的回呼僅在連線幾乎設定完成時才安裝,因此沒有提供太多資訊,並且錯過了與處理 SSL 物件內的狀態變更相關的所有詳細資訊。此舉還使用 SSL_state_string_long() 擴充了回呼,以列印有關狀態變更的更多資訊。同時,修正了一些錯誤地引用 fe-secure.c 中回呼及其先前位置的註解。作者:Daniel Gustafsson 討論:https://postgr.es/m/232CF476-94E1-42F1-9408-719E2AEC5491@yesql.se https://git.postgresql.org/pg/commitdiff/af0e79c8f4f4c3c2306855045c0d02a6be6485f0
在加密雜湊基礎結構中引入 SHA1 實作。透過此提交,當使用 OpenSSL 建置後端時,SHA1 會透過 OpenSSL 提供的 EVP 實作,並使用 KAME 作為備用實作,KAME 位於 pgcrypto 中,並且已經針對與一組 init、update 和 final 常式整合而進行了塑形。已重新命名結構和常式,以使事物與 MD5 和 SHA2 的備用實作保持一致。uuid-ossp 長期以來一直使用 pgcrypto 的捷徑來取得 SHA1 的副本(如果需要)。這是根據 ./configure 中的建置選項而建置的,因此這會清理一些程式碼並移除 pgcrypto 和 uuid-ossp 之間的建置依賴項。請注意,這將有助於重構 HMAC,因為 pgcrypto 提供了使用 MD5、SHA1 或 SHA2 的選項,因此僅缺少第二個選項才能使其成為可能。作者:Michael Paquier 審閱人:Heikki Linnakangas 討論:https://postgr.es/m/X9HXKTgrvJvYO7Oh@paquier.xyz https://git.postgresql.org/pg/commitdiff/a8ed6bb8f4cf259b95c1bff5da09a8f4c79dca46
Fujii Masao 推送了
postgres_fdw: 新增函數以列出快取的外部伺服器連線。此提交新增函數 postgres_fdw_get_connections(),以傳回 postgres_fdw 從本機會話建立到外部伺服器的所有開啟連線的外部伺服器名稱。此函數還會傳回每個連線是否有效。此函數在檢查所有開啟的外部伺服器連線時很有用。如果我們從函數的結果中發現一些要捨棄的連線,則可能可以透過即將新增的函數明確關閉它們。由於此提交新增了新函數,因此將 postgres_fdw 的版本升級到 1.1。作者:Bharath Rupireddy,由 Fujii Masao 調整 審閱人:Zhijie Hou、Alexey Kondratov、Zhihong Yu、Fujii Masao 討論:https://postgr.es/m/2d5cb0b3-a6e8-9bbb-953f-879f47128faa@oss.nttdata.com https://git.postgresql.org/pg/commitdiff/708d165ddb92c54077a372acf6417e258dcb5fef
doc: 新增關於 postgres_fdw_get_connections() 傳回的伺服器名稱的說明。先前的文件沒有提及 postgres_fdw_get_connections() 在 server_name 欄位中傳回 NULL 的情況。使用者可能會對為什麼傳回 NULL 感到困惑。此提交新增了以下說明:在 postgres_fdw_get_connections() 中,如果伺服器已捨棄,則無效連線的伺服器名稱將為 NULL。建議者:Zhijie Hou 作者:Bharath Rupireddy 審閱人:Zhijie Hou、Fujii Masao 討論:https://postgr.es/m/e7ddd14e96444fce88e47a709c196537@G08CNEXMBPEKD05.g08.fujitsu.local https://git.postgresql.org/pg/commitdiff/ee79a548e746da9a99df0cac70a3ddc095f2829a
Peter Eisentraut 推送了
因參數設定不足而暫停復原。當在實體複寫主要伺服器上變更某些參數時,會使用 XLOG_PARAMETER_CHANGE WAL 紀錄將此變更傳達給備用伺服器。 然後備用伺服器會檢查其自身的設定是否至少與主要伺服器上的設定一樣大。 如果不是,備用伺服器將會關閉並產生致命錯誤。 此修補程式將熱備用伺服器的此行為變更為在該點暫停復原。 這樣允許在資料庫管理員確定後續步驟時,備用伺服器上的讀取流量能夠繼續。 當復原取消暫停時,伺服器將會關閉(如同先前一樣)。 其想法是在復原暫停時修正參數,然後在維護期間重新啟動。Reviewed-by: Sergei Kornilov sk@zsrv.org Discussion: https://postgres.tw/message-id/flat/4ad69a4c-cc9b-0dfe-0352-8b1b0cd36c7b@2ndquadrant.com https://git.postgresql.org/pg/commitdiff/15251c0a60be76eedee74ac0e94b433f9acca5af
pageinspect:將區塊編號參數變更為 bigint。 區塊編號是 32 位元無符號整數。 因此,它們可以容納的最小 SQL 整數類型是 bigint。 但是,在 pageinspect 模組中,大多數處理區塊編號的輸入和輸出參數都宣告為 int。 因此,區塊編號大於帶正負號的 32 位元整數的行為是可疑的。 將這些參數變更為 bigint 類型,並在區塊範圍上新增一些更明確的錯誤檢查。 (其他 contrib 模組似乎已經正確地執行了此操作。)由於我們正在變更現有函式的引數類型,為了避免在擴充套件更新之前更新二進位檔案時發生異常行為,我們需要為進入點建立新的 C 符號,類似於其他擴充套件中的作法。 Reported-by: Ashutosh Bapat ashutosh.bapat.oss@gmail.com Reviewed-by: Alvaro Herrera alvherre@alvh.no-ip.org Reviewed-by: Michael Paquier michael@paquier.xyz Discussion: https://postgres.tw/message-id/flat/d8f6bdd536df403b9b33816e9f7e0b9d@G08CNEXMBPEKD05.g08.fujitsu.local https://git.postgresql.org/pg/commitdiff/f18aa1b203930ed28cfe42e82d3418ae6277576d
移除虛假的追蹤點。 對 LWLockWaitForVar() 的呼叫觸發了 TRACE_POSTGRESQL_LWLOCK_ACQUIRE 追蹤點,但 LWLockWaitForVar() 實際上從未取得 LWLock。 (可能是 68a2e52bbaf 中的複製/貼上錯誤。)將其移除。 Author: Craig Ringer craig.ringer@enterprisedb.com Discussion: https://postgres.tw/message-id/flat/CAGRY4nxJo+-HCC2i5H93ttSZ4gZO-FSddCwvkb-qAfQ1zdXd1w@mail.gmail.com https://git.postgresql.org/pg/commitdiff/09418bed67a7d5d5a8c9c3070f4c9048455a5389
Magnus Hagander 推送
Bump PGSTAT_FILE_FORMAT_ID。 這在 960869da08 中遺漏了 Reported-By: Laurenz Albe Discussion: https://postgr.es/m/4f0aacc5fe1b4bfafa32b36ecd97469fae526a75.camel@cybertec.at https://git.postgresql.org/pg/commitdiff/b2f87b46690ab8cd3ee7c77226fcf3f5bb713e5b
從文件中移除對 ftp 伺服器的參考。 我們已經很久沒有使用 ftp 了,但是在文件中還剩下一個參考。 Author: Daniel Gustafsson daniel@yesql.se Discussion: https://postgr.es/m/6880D602-7286-46EC-8A03-14E3248FEC7A@yesql.se https://git.postgresql.org/pg/commitdiff/0a9ae44288d122c12aa0862b032ae892942da452
移除 make_diff 工具集。 這些工具大部分因切換到 git 而被淘汰,並且移除它們比更新不正確的文件更容易。 Discussion: https://postgr.es/m/CABUevEwmASMn4WRJ6RagBx43sj10ctfMHcMA_-7KA3pDYmwpJw@mail.gmail.com https://git.postgresql.org/pg/commitdiff/8a337b0ed21c654521da137159b8b9327a5cb971
Robert Haas 推送
Tom Lane 推送
新增 bytea 版本的 ltrim() 和 rtrim()。 我們已經有 bytea btrim(),但出於某種原因沒有另外兩個。 Joel Jacobson Discussion: https://postgr.es/m/d10cd5cd-a901-42f1-b832-763ac6f7ff3a@www.fastmail.com https://git.postgresql.org/pg/commitdiff/a6cf3df4ebdcbc7857910a67f259705645383e9f
縮小區域變數的範圍。 這是一種更好的風格,並且與另一個 if 分支更對稱。 這可能應該包含在 9de77b545 中(這創造了機會),但它被忽略了。 Japin Li Discussion: https://postgr.es/m/MEYP282MB16699FA4A7CD57EB250E871FB6A40@MEYP282MB1669.AUSP282.PROD.OUTLOOK.COM https://git.postgresql.org/pg/commitdiff/3fd80c728dc36fbd250ca3019c2f5fa2567f1a75
避免在使用 WHERE CURRENT OF 和自訂掃描計畫時發生崩潰。 execCurrent.c 的 search_plan_tree() 假設 ForeignScanStates 和 CustomScanStates 必然具有有效的 ss_currentRelation。 對於 postgres_fdw 的遠端聯結和遠端聚合計畫,以及非葉節點自訂掃描,這顯然是不正確的,它們也可能沒有可識別的掃描關聯。 在欄位為 null 時忽略這些節點,以避免崩潰。 在某些可能允許 WHERE CURRENT OF 工作的情況下,此解決方案將導致類似「游標 "foo" 不是表 "bar" 的簡單可更新掃描」的錯誤。 對於 postgres_fdw 的用法來說,這不是問題,因為聯結或聚合無論如何都會使 WHERE CURRENT OF 無效。 但是,其他透明的上層自訂掃描節點可能會發現這很煩人。 當且如果有人關心在此類情境中工作時,我們可以建立一個自訂掃描提供者回呼來確定什麼是安全的。 Report and patch by David Geier, commentary by me. It's been like this for awhile, so back-patch to all supported branches. Discussion: https://postgr.es/m/0253344d-9bdd-11c4-7f0d-d88c02cd7991@swarm64.com https://git.postgresql.org/pg/commitdiff/60661bbf2dca0c1e744c948c74bccab98933c45b
移除對具有 WHERE CURRENT OF 的 MergeAppend 計畫的錯誤支援。 有人擴充了 search_plan_tree(),將 MergeAppend 完全視為 Append,這是 100% 錯誤的,因為與 Append 不同,我們無法假設只有一個輸入節點在主動傳回元組。 因此,跨 UNION ALL 或繼承樹使用 MergeAppend 的游標可能會錯誤地在與游標的目前輸出列不同的表中的一個具有與目前輸出列相同 TID 的列上比對 WHERE CURRENT OF 查詢。 刪除錯誤的程式碼; 這意味著在這種情況下,現在將傳回類似「游標 "foo" 不是表 "bar" 的簡單可更新掃描」的錯誤,而不是靜默地出現異常行為。 但是,使用者不應該對此感到驚訝,因為相同的游標查詢可能已經以這種方式失敗,具體取決於所選的計畫。 (如果使用明確的 Sort 節點而不是 MergeAppend 完成排序,則會以這種方式失敗。)展開明顯不足的註釋,使其更明確地說明此程式碼正在執行的操作,以期防止將來犯錯。 It's been like this for awhile, so back-patch to all supported branches. Discussion: https://postgr.es/m/482865.1611075182@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/a0efda88a679edaee9855628cb05b2ab00d80a15
在選定的測試案例中停用 vacuum 頁面跳過功能。預設情況下,VACUUM 會跳過它無法立即取得獨佔存取權的頁面,這表示即使是像檢查點緩衝區寫入這樣無害且不可預測的活動,也可能阻止頁面被處理。通常這沒什麼大不了的,但我們有一些測試案例會檢查 VACUUM 處理的結果,因此如果跳過感興趣的頁面,這些案例就會失敗。這似乎是某些罕見的建置農場 (buildfarm) 失敗的原因。為了修復這個問題,請在測試中 VACUUM 指令中新增 DISABLE_PAGE_SKIPPING 選項,以解決這個問題。順便一提,移除 pageinspect/sql/page.sql 中重複的查詢。根據需要進行回溯修補 (back-patch) (其中一些案例與 v10 一樣古老)。討論:https://postgr.es/m/413923.1611006484@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/c2dc1a79767a0f947e1145f82eb65dfe4360d25f
進一步調整 macOS 的 PG_SYSROOT 啟發式演算法。結果表明,在某些時候(可能與目錄條目順序有關?),xcrun 會報告 SDK 路徑為 /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk,這通常是指向具有版本編號的同級目錄的符號連結。我們跳過非版本編號路徑名的啟發式演算法正在拒絕該路徑,這是錯誤的。我們仍然希望最終得到一個帶有版本編號的 PG_SYSROOT 值,但我們可以通過取消引用符號連結來實現。與之前的修復一樣,回溯修補到所有受支援的版本。討論:https://postgr.es/m/522433.1611089678@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/9d23c15a034ba163ae1045b945954e8e1bcfc72a
修正 pull_varnos 錯誤計算 PlaceHolderVar 的 relids 集合的問題。之前,pull_varnos() 將 PlaceHolderVar 的 relids 視為與其內容中的 relids 相等,但這無法解釋由於外部聯接而必須延遲 PHV 評估的可能性。這可能會導致格式不正確的計劃。已知案例最終會觸發 createplan.c 中 "failed to assign all NestLoopParams to plan nodes" 的健全性檢查,但可能還有其他症狀。要使用的正確值是我們實際打算評估 PHV 的聯接層級。我們可以從相關聯的 PlaceHolderInfo 的 ph_eval_at 欄位中取得該值。但是,有些地方會在建立 PlaceHolderInfos 之前呼叫 pull_varnos();在這種情況下,回退到保守的假設,即 PHV 將在其語法層級進行評估。(原則上,這可能會導致遺漏一些合法的最佳化,但我不知道在實務中有任何案例出現這種情況。)對於 deconstruct_jointree() 期間發生的呼叫,情況也有些棘手,但 AFAICS ph_eval_at 欄位應該在我們需要它們時達到最終值。使此工作正常進行的主要問題是 pull_varnos() 無法存取 PlaceHolderInfos。我們可以輕鬆地解決這個問題,如果在 HEAD 中有點乏味的話,可以將規劃器的 "root" 指標傳遞給它。在後端分支中,這會導致延伸模組無法接受的 API/ABI 變更,因此保留現有的進入點,並新增帶有額外參數的新進入點。(如果呼叫舊的進入點並遇到 PHV,它將回退到使用語法層級,再次可能遺漏一些有效的最佳化。)回溯修補到 v12。在此之前,計算肯定也是錯誤的,但由於對 PlaceHolderVar 來自的子查詢施加的聯接順序限制,因此似乎無法產生錯誤的計劃。僅當 commit 4be058fe9 允許完全折疊微不足道的子查詢,從而消除其聯接順序限制時,該錯誤才變得可達。根據 Stephan Springl 的報告。討論:https://postgr.es/m/171041.1610849523@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/55dc86eca70b1dc18a79c141b3567efed910329d
改進 libpq 連線失敗訊息的新措辭。"connection to server so-and-so failed:" 似乎比之前的措辭 "could not connect to so-and-so:" (由 52a10224e 引入) 更清晰,因為後者暗示了網路層級的連線失敗。我們現在將這個字串作為所有類型連線失敗的前綴,例如驗證失敗;因此我們需要不暗示底層錯誤的措辭。根據與 Robert Haas 的討論。討論:https://postgr.es/m/CA+TgmobssJ6rS22dspWnu-oDxXevGmhMD8VcRBjmj-b9UDqRjw@mail.gmail.com https://git.postgresql.org/pg/commitdiff/27a48e5a16ff2227ddf44ee717d9bcd89d22a7aa
文件:移除 PQreset() 文件中具有誤導性的聲明。此文字聲稱重新連線將發生 "to the same server",但在程式碼中沒有這樣的保證,並且堅持這樣做也不會是一種改進。回溯修補到 v10,其中新增了多主機連線字串。討論:https://postgr.es/m/1095901.1611268376@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/ab66645628d38a7047996b294b213f3048f7ef9b
重新允許在 pl/pgsql 表達式中使用 DISTINCT。我從 commit c9d529848 的語法中省略了這一點,認為不值得支援。但是我們已經收到一個投訴,因此這種判斷似乎是錯誤的。它不需要大量的程式碼,所以把它加回去。(但我仍然將 UNION/INTERSECT/EXCEPT 劃清界線:這些需要大量的語法重構,並且單個結果列的限制使它們幾乎毫無用處。) 也重新思考文件:此行為是所有 pl/pgsql 表達式的屬性,而不僅僅是賦值。討論:https://postgr.es/m/20210122134106.e94c5cd7@mail.verfriemelt.org https://git.postgresql.org/pg/commitdiff/7cd9765f9bd3397b8d4d0f507021ef848b6d48d2
避免為連線失敗冗餘地添加 PQerrorMessage 前綴。libpq 的連線失敗錯誤訊息本身就很好,特別是因為 commit 52a10224e/27a48e5a1。在它們前面加上 'could not connect to database "foo"' 之類的前綴只是多餘的,如果特定的資料庫名稱與失敗無關,甚至可能具有誤導性。(如果是這樣,我們相信後端的錯誤訊息將包含資料庫名稱。)實際上,psql 很久以來就沒有使用過任何這樣的前綴。因此,使我們所有其他程式和文件範例與 psql 的實踐保持一致。討論:https://postgr.es/m/1094524.1611266589@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/58cd8dca3de0b3c7d378a412eca1f7289b5e4978
文件:改進在 macOS 上進行建置的指示。根據最近的討論,我們應該指示人們安裝 Apple 的 command line tools;安裝 Xcode 是次要的。此外,修正用於找出預設 sysroot 的範例指令,因為我們現在知道最初建議的指令可能會產生與您的作業系統版本不符的結果。並記錄如果您真的不希望 configure 選擇 sysroot 的解决方法。討論:https://postgr.es/m/20210119111625.20435-1-james.hilliard1@gmail.com https://git.postgresql.org/pg/commitdiff/50bebc1ae1804e0ddf86b667122d3f8b22fa19b7
抑制 ecpg 語法中的 bison 警告。opt_distinct_clause 僅在 PLpgSQL_Expr 中使用,ecpg 會忽略它,因此它也需要忽略 opt_distinct_clause。我在 7cd9765f9 中的疏忽;由 Bruce Momjian 報告。討論:https://postgr.es/m/E1l33wr-0005sJ-9n@gemulon.postgresql.org https://git.postgresql.org/pg/commitdiff/3fc81ce459e1696f7e5e5b3b8229409413bf64b4
更新 ecpg 的 connect-test1,以反映連線失敗訊息的變更。我應該在提交 52a10224e 及其後續提交中更新這個,但我錯過了,因為它預設不執行,而且沒有任何 buildfarm 執行它。也許我們應該嘗試改善這種情況。討論: https://postgr.es/m/CAH2-Wz=j9SRW=s5BV4-3k+=tr4N3A03in+gTuVA09vNF+-iHjA@mail.gmail.com https://git.postgresql.org/pg/commitdiff/68d1c339417ea2e8df42e11db57472fcdbfe6a55
文件:更新文件中連線失敗訊息的範例。既然 52a10224e 及其後續提交的事情大致底定,請確保文件中的範例是最新的。https://git.postgresql.org/pg/commitdiff/183bbd1b6d4376f1b04c02b7a20b55019f6d84f4
文件:清理 contrib/pageinspect 的 GIST 函數文件。我來修復 buildfarm 中看到的過寬 PDF 頁面警告,但也花了一些時間編輯了附近的一些文字。https://git.postgresql.org/pg/commitdiff/7e57255f6189380d545e1df6a6b38827b213e3da
為 contrib/auto_explain 新增一個簡單的測試。此模組之前沒有任何測試覆蓋。討論: https://postgr.es/m/1445881.1611441692@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/0c1e8845f28bd07ad381c8b0d6701575d967b88e
Bruce Momjian 推送
Amit Kapila 推送
Thomas Munro 推送
Craig Ringer 發送了一個補丁,以交叉引用信號處理邏輯的註釋。
Joel Jacobson 發送了一個補丁,以實現 catalog_oidjoins.pl,它從 catalogs.sgml 中解析目錄引用。
Bertrand Drouvot 發送了另一個修訂版的補丁,以在備用伺服器上啟用最簡邏輯解碼。
Justin Pryzby 發送了另一個修訂版的補丁給 g_dump:使 CLUSTER ON 成為一個單獨的 dump 物件,因為它需要在任何子索引還原和附加之後還原。
John Naylor 發送了另一個修訂版的補丁,使其可以在更廣泛的時間間隔內截斷時間戳記。
Robert Haas 發送了一個補丁來移除 CheckpointLock。
Craig Ringer 發送了一個補丁來新增 ProcessInterrupts_hook。
Atsushi Torikoshi 發送了一個補丁,修復了一個角落案例,其中 TOAST 條件對於列大小而言是錯誤的。
Kyotaro HORIGUCHI 和 Noah Misch 交換了補丁,以測試快照是否過舊以及 wal_level=minimal,避免使用 RelationNeedsWAL 來識別關係持久性,並在跳過 WAL 時保持 page-LSN 更新。
Heikki Linnakangas 發送了另外兩個修訂版的補丁,以為了安全和清晰起見,移動了一些 ResourceOwnerEnlarge() 調用,使 resowners 更容易擴展,並使 hash_resource_elem 在有 64 位輸入的情況下更好地工作。
Michail Nikolaev 發送了一個補丁,以在備用伺服器上添加對 LP_DEAD 提示位元建立索引的完整支援。
Vigneshwaran C 發送了另一個修訂版的補丁,以新增對 PUBLICATION 的 schema 層級支援。
Masahiko Sawada 發送了另外兩個修訂版的補丁,以引入一個 IndexAM API,用於選擇索引 vacuum 策略,基於相同策略選擇索引 vacuum 策略,並且如果索引沒有增長,則跳過 B-tree bulkdelete。
Craig Ringer 發送了一個補丁,以添加更多關於在擴展程式碼中 (不) 該做什麼的文件。
Atsushi Torikoshi 發送了另外兩個修訂版的補丁,以向 pg_lock_status 視圖和支援函數新增 waitstart 欄位。
Heikki Linnakangas 和 Jürgen Purtz 交換了補丁,以在教學文件中新增一個關於架構的章節。
Justin Pryzby 和 Aleksey Kondratov 交換了補丁,使 REINDEX、CLUSTER 和 VACUUM FULL 能夠即時變更表空間。
Pavel Stěhule 發送了另外三個修訂版的補丁,以實現 schema 變數。
Peter Smith 發送了另外三個修訂版的補丁,使其可以使用多個後台工作進程進行 tablesync。
Dilip Kumar 發送了另外三個修訂版的補丁,使 pg_is_wal_replay_paused 返回恢復暫停的狀態。
Amit Langote 發送了五個修訂版的補丁,使 get_partition_for_tuple() 可在更廣泛的上下文中使用,並使用相同的方法來避免為某些參考完整性檢查使用 SPI 介面。
Takamichi Osumi 發送了另一個修訂版的補丁,以加強對歸檔恢復的保護措施。
Bruce Momjian 發送了另一個修訂版的補丁,以添加金鑰管理。
Buzhen (步真) 發送了一個補丁,將掃描有效快取的策略從 FIFO 策略更改為 LRU。
Kyotaro HORIGUCHI 發送了另一個修訂版的補丁,使其可以指定 CRL (憑證撤銷列表) 目錄,使其與 X509_STORE_load_locations 的實現保持一致。
Mark G 發送了一個補丁,使 heapam.c 中的 gaps 陣列成為靜態的。
Jie Zhang 發送了一個補丁,使 pg_dump -?/--help
的輸出更清晰易讀。
Michaël Paquier 發送了一個補丁,在 ilist.h 和 bufpage.h 的內聯函數中繪製一些 PG_USED_FOR_ASSERTS_ONLY。
David Fetter 發送了另一個修訂版的補丁,將 popcount (count_set_bits) 公開給 SQL。
Greg Sabino Mullane 發送了另一個修訂版的補丁,通過提供輸入參數類型來幫助 psql 的 \df 在可能的函數中進行選擇。
Justin Pryzby 發送了另一個修訂版的補丁,以實現 CREATE TABLE (LIKE .. INCLUDING ACCESS METHOD)。
Li Japin 發送了一個補丁,使用布林值陣列而不是字元指標來表示 SPI 中參數的 NULL 性。
Julien Rouhaud 發送了另一個修訂版的補丁,以將 queryId 新增到 pg_catalog.pg_stat_activity 視圖。
Stephen Frost 發送了另外兩個修訂版的補丁,將 checkpoint_completion_target 的預設值更改為 0.9。
Dilip Kumar 發送了另一個修訂版的補丁,以實現表的自訂壓縮方法。
Stephen Frost 和 Craig Ringer 交換了補丁,以新增一個文件部分,用於已過時和已重新命名的函數和設定。
Vigneshwaran C 發送了另一個修訂版的補丁,使其可以列印 postgres 進程的回溯,這些進程是調用 pg_print_callstack() 的實例的一部分。此功能由 GUC 保護。
Dmitry Dolgov、Pavel Stěhule 和 Dian M Fay 交換了補丁,以將通用類型下標基礎結構用於 JSONB。
Daniel Gustafsson 和 Jacob Champion 交換了補丁,以支援 NSS 作為 libpq TLS 後端。
Daniel Gustafsson 發送了另一個修訂版的補丁,以支援在執行中的叢集中啟用/停用校驗和。
Tom Lane 發送了一個補丁,以修復檢測 OSX 的 pwritev 支援。
Hou Zhijie 發送了另一個修訂版的補丁,為 eval_const_expressions 添加一個 nullif 案例。
Masahiro Ikeda 發送了一個補丁,重構了全域統計訊息的變數名稱,以清楚表明它們是訊息。
Peter Smith 發送了另一個修訂版的補丁,以實現兩階段事務的邏輯解碼。
Justin Pryzby 發送了另一個修訂版的補丁,使 INSERT SELECT 使用 BulkInsertState。
Alexander Korotkov 提交了另一個修補程式版本,以修正片語搜尋和多詞位符記之間的不順暢之處。
Alexander Korotkov 提交了一個修補程式,使 json **
運算子之後的所有內容都使用嚴格模式,因為寬鬆模式會產生意外的結果。
Nikita Glukhov 和 Erik Rijkers 交換了修補程式,以根據標準實作 SQL/JSON 函式。
Anastasia Lubennikova 提交了另兩個修補程式版本,旨在修正一個錯誤,該錯誤表現為 pg_upgrade 在具有非標準 ACL 時失敗,方法是新增一些額外的檢查來涵蓋這種情況。
David Rowley 提交了一個修補程式,以正確計算使用 heap_setscanlimits() 反向掃描頁面。
Nikita Glukhov 提交了另一個修補程式版本,以根據標準實作 JSON_TABLE。
Kyotaro HORIGUCHI 提交了另一個修補程式版本,以重構統計資料收集器,使其使用共享記憶體而不是檔案來進行暫時儲存。
Julien Rouhaud 提交了另一個修補程式版本,以新增一個新的 COLLATION 選項到 REINDEX。
David Rowley 提交了另一個修補程式版本,使其可以掃描 TIDs 的範圍,而無需掃描整個關係,就像循序掃描一樣。
Kyotaro HORIGUCHI 提交了另一個修補程式版本,以新增一個新的 pg_waitlsn() 函式。
Daniel Gustafsson 提交了一個修補程式,以將特定於程式庫的 SSL 測試設定重構到一個獨立的模組中,以便支援 OpenSSL 以外的 TLS 實作。
Masahiko Sawada 提交了一個修補程式,在 lazy_tid_reaped() 中的 bsearch() 之前,新增了對編碼 itermpointers 的邊界檢查,並內聯了 lazy_tid_reaped()。
Pavel Stěhule 提交了三個修補程式版本,以新增一個 CALL 的計畫快取。
Amul Sul 提交了另一個修補程式版本,以實作 ALTER SYSTEM READ {ONLY,WRITE}。
Matthias van de Meent 提交了一個修補程式,以更新 postgres_fdw,使其在 IMPORT SCHEMA LIMIT TO 中命名時匯入分割區。
Vigneshwaran C 提交了一個修補程式,以在 CREATE/ALTER SUBSCRIPTION 期間識別發布者遺失的發布。
Álvaro Herrera 提交了另一個修補程式版本,以新增追蹤功能到 libpq。
Peter Eisentraut 和 Tom Lane 交換了修補程式,以新增主鍵到系統目錄。
Denis Laxalde 提交了一個修補程式,以在 pg_upgrade 中停用伺服器啟動期間的背景工作程序。
Greg Nancarrow 提交了另一個修補程式版本,使其可以並行執行 INSERT (INTO ... SELECT ...)。
Álvaro Herrera 提交了另一個修補程式版本,以新增 libpq 的批次/管線支援。
Andrey Borodin 提交了另一個修補程式版本,以重新組織 pglz 壓縮程式碼以提高效率,使其速度提高了約 1.4 倍。
Yugo Nagata 提交了另一個修補程式版本,以實作具體化檢視表的增量維護。
Tomáš Vondra 提交了另兩個修補程式版本,以實作表達式的擴展統計資訊。
Heikki Linnakangas 提交了另一個 pg_rewind 的修補程式版本,使其根據新的大小擷取小型檔案。
Tomáš Vondra 提交了另一個修補程式版本,使其可以在可用的情況下,將非揮發性記憶體用於 WAL 緩衝區。
Heikki Linnakangas 提交了另一個修補程式版本,以重構 LogicalTapeSet/LogicalTape 介面,使所有磁帶函式(例如 LogicalTapeRead 和 LogicalTapeWrite)都採用 LogicalTape 作為參數,而不是 LogicalTapeSet+磁帶編號,並將舊的多相合併演算法替換為簡單的平衡 k 路合併,並修正磁帶讀取緩衝區的大小。
Tomáš Vondra 提交了另一個修補程式版本,以實作 BRIN 多範圍索引。
Masahiro Ikeda 提交了另兩個修補程式版本,以新增欄位到 pg_stat_wal 檢視表來追蹤 WAL I/O 活動,以及一個新的 GUC,track_wal_io_timing,以啟用收集,因為開銷可能很大。
Jim Finnerty 提交了另一個修補程式版本,以準備實作 64 位元 xid,方法是新增一種方法來擁有 64 位元 GUC,使用 XID_FMT 來格式化 xid,並使用 ClogPageNumber 代替 int 以確保類型安全。
Michaël Paquier 提交了另一個修補程式版本,以將 HMAC 實作重構到 common/。
Amit Kapila 和 Bharath Rupireddy 交換了修補程式,以修正 ALTER PUBLICATION...DROP TABLE 的行為,方法是在 RelationSyncEntry 失效時初始化 pubactions。
Mark Rofail 提交了另三個修補程式版本,使其可以檢查陣列的每個元素是否符合(一般而言)不同表格中的主鍵。
Thomas Munro 提交了另一個修補程式版本,以在 pg_test_fsync 中使用 pg_pwrite()。
Tomáš Vondra 提交了一個修補程式來測試 TOAST 可見性。
Andy Fan 提交了一個修補程式來建置一些隱含的修剪 quals,以擴展計畫時間分割區修剪和初始化分割區修剪的使用案例。