JDBC 42.3.0 已釋出。
pgmetrics 1.12,一個用於 PostgreSQL 指標的命令列工具,已釋出。
StackGres 1.0.0,一個在 Kubernetes 上執行 PostgreSQL 的平臺,已釋出。https://stackgres.io/
pgexporter 0.2.0,一個 PostgreSQL 的 Prometheus exporter,已釋出
pgAdmin4 6.1,一個用於 PostgreSQL 的 Web 和原生 GUI 控制中心,已釋出。
https://archives.postgresql.org/pgsql-jobs/2021-10/
Planet PostgreSQL:https://planet.postgresql.org/
本週 PostgreSQL 週報由 David Fetter 提供。
請在太平洋標準時間(PST8PDT)週日晚上3:00之前將新聞和公告發送至 david@fetter.org。
Michaël Paquier 提交
修復 psql 新 TAP 測試的可移植性問題。c0280bc 和 d9ddc50 在 001_basic.pl 中新增的測試引入了直接呼叫 psql 的命令,使其對環境敏感。一個問題是這些命令忘記了 -X 來不使用本地 .psqlrc,導致所有這些測試失敗,如果 psql 無法正確解析該檔案。TAP 測試應設計成獨立執行,不依賴於執行它們的環境。由於 PostgresNode::psql 已經提供了這些新測試所需的所有設施,因此切換到它而不是直接呼叫 psql 命令(當需要與後端互動時)。稍微重構了測試,以便能夠檢查 stdout 和 stderr 的預期模式,保持與之前相同的覆蓋範圍。報告人:Peter Geoghegan 討論:https://postgr.es/m/CAH2-Wzn8ftvcDPwomn+y04JJzbT=TG7TN=QsmSEATUOW-ZuvQQ@mail.gmail.com https://git.postgresql.org/pg/commitdiff/384f1abdb9b0f669279fcd57ba2173eb31724740
在事務中止期間正確重置快照匯出狀態。在建立複製槽的過程中,同一事務中生成的 ERROR(與建立待匯出快照的事務相同)會導致後端處於不一致狀態,因為關聯的靜態匯出快照狀態在事務中止時未被重置,而僅在 WAL 傳送器收到的後續命令中被重置(該命令是在複製槽建立時建立此快照的)。如果該會話嘗試再次匯出快照(例如在建立複製槽時),這將觸發不一致失敗。請注意,快照匯出不能在事務塊中發生,因此無需擔心重置子事務中止的狀態。此外,這種不一致狀態非常不可能暴露給使用者。例如,一種可能發生的情況是在構建初始待匯出快照時出現記憶體不足的錯誤。Dilip 在研究另一個補丁時發現了這個問題,該補丁導致此程式碼路徑因與 HEAD 無關的原因而發生錯誤。作者:Dilip Kumar 審閱者:Michael Paquier, Zhihong Yu 討論:https://postgr.es/m/CAFiTN-s0zA1Kj0ozGHwkYkHwa5U0zUE94RSc_g81WrpcETB5=w@mail.gmail.com 向後移植到:9.6 https://git.postgresql.org/pg/commitdiff/409f9ca4471331be0f77b665ff3a1836a41de5b3
阻止對 ALTER INDEX/TABLE index_name ALTER COLUMN colname SET (options) 進行操作。在具有列名的索引上執行此命令的語法在解析器中一直被授權,並且從未被文件化。自 911e702 以來,可以在 CREATE INDEX 時定義操作類引數,這實際上破壞了舊的 ALTER INDEX/TABLE 情況,其中 n_distinct 和 n_distinct_inherited 等關係級引數可以為索引定義(參見 76a47c0 及其討論,該點仍然未被使用)。在 v13~ 中嘗試這樣做會導致索引變得不可用,因為有一個新的專用程式碼路徑來載入操作類引數,而不是之前可用的關係級引數。請注意,可以透過手動目錄更新來修復問題,以使關係恢復聯機。此提交暫時停用此命令,因為使用列名進行索引操作無論如何都沒有意義,尤其是在索引表示式中名稱是自動計算的情況下。未來正確支援此情況的一種方法是使用列號,就像 ALTER INDEX .. ALTER COLUMN .. SET STATISTICS 一樣。分割槽索引已被阻止,但普通索引未被阻止。為兩種情況添加了一些測試。ANALYZE 中有一些程式碼用於強制使用 n_distinct 用於索引表示式(如果定義了該引數),但目前將其刪除,直到/如果支援此功能(請注意,索引級引數之前在 pg_dump 中也從未得到支援),因此這只是死程式碼。報告人:Matthijs van der Vleuten 作者:Nathan Bossart, Michael Paquier 審閱者:Vik Fearing, Dilip Kumar 討論:https://postgr.es/m/17220-15d684c6c2171a83@postgresql.org 向後移植到:13 https://git.postgresql.org/pg/commitdiff/fdd88571454e2b00dbe446e8609c6e4294ca89ae
修復 MSVC 與 OpenSSL 3.0.0 的構建。Visual Studio 的構建指令碼將因檢查第二個數字失敗而無法正確檢測到 3.0.0 的構建。這已根據需要進行了調整,允許構建完成。請注意,文件中提到的 OpenSSL 的 MSI 對於 Win32 和 Win64 庫名稱沒有改變,因此此更改很簡單。報告人:htalaco (透過 github) 審閱者:Daniel Gustafsson 討論:https://postgr.es/m/YW5XKYkq6k7OtrFq@paquier.xyz 向後移植到:9.6 https://git.postgresql.org/pg/commitdiff/41f30ecc29c89285d3eecd435906c4e9cb048be4
修復從模板資料庫複製依賴項時 pg_shdepend 損壞。為新資料庫使用帶有需要複製的共享依賴項的模板資料庫會導致 pg_shdepend 損壞,因為用於插入具有槽的值的索引號的計算存在一個偏移錯誤。此問題由 e3931d0 引入。監控程式碼的其他部分,沒有類似的錯誤。報告人:Sven Klemm 作者:Aleksander Alekseev 審閱者:Daniel Gustafsson, Michael Paquier 討論:https://postgr.es/m/CAJ7c6TP0AowkUgNL6zcAK-s5HYsVHVBRWfu69FRubPpfwZGM9A@mail.gmail.com 向後移植到:14 https://git.postgresql.org/pg/commitdiff/98ec35b0bbf6003e89fc06aa140e12fd90bbad47
文件:描述 pg_receivewal 的流式傳輸開始的計算方法。文件關於 WAL 流式傳輸的起始 LSN 的說明不夠精確,如果本地歸檔目錄(使用 pg_receivewal 命令定義)中找不到任何內容,則在此問題上更詳細地說明。摘錄自同一作者的一大塊補丁。作者:Ronan Dunklau, Michael Paquier 討論:https://postgr.es/m/18708360.4lzOvYHigE@aivenronan 向後移植到:10 https://git.postgresql.org/pg/commitdiff/1e9475694b0ae2cf1204d01d2ef6ad86f3c7cac8
Heikki Linnakangas 提交
用簡單的平衡 k 路合併演算法替換多相合並演算法。多相合並的優點是它可以高效地重用輸入磁帶作為輸出磁帶,但這在現代硬體上無關緊要,因為我們可以輕鬆模擬任意數量的磁帶驅動器。合併期間我們可以/應該使用的輸入磁帶數量受 work_mem 限制,但我們當前不寫入的輸出磁帶只佔用少量記憶體,因此沒有必要吝嗇它們。這使得需要多次合併傳遞的排序更快。討論:https://postgres.tw/message-id/420a0ec7-602c-d406-1e75-1ef7ddc58d83%40iki.fi 審閱者:Peter Geoghegan, Zhihong Yu, John Naylor https://git.postgresql.org/pg/commitdiff/65014000b351d5725eb00d133416ab1b4f8245b1
重構 LogicalTapeSet/LogicalTape 介面。所有磁帶函式,如 LogicalTapeRead 和 LogicalTapeWrite,現在都以 LogicalTape 作為引數,而不是 LogicalTapeSet+磁帶編號。您可以在單個 LogicalTapeSet 中建立任意數量的 LogicalTapes,並且不必在建立磁帶集時預先決定數量。這簡化了 nodeAgg.c 中雜湊聚合溢位的磁帶管理。討論:https://postgres.tw/message-id/420a0ec7-602c-d406-1e75-1ef7ddc58d83%40iki.fi 審閱者:Peter Geoghegan, Zhihong Yu, John Naylor https://git.postgresql.org/pg/commitdiff/c4649cce39a41b27db874e75ddd47adaec1b0ea4
修復 elog 中格式修飾符。之前的提交 65014000b3 將傳遞給 elog 的變數從 int64 更改為 size_t 變數,但忽略了相應更改格式字串中的修飾符。根據 buildfarm 成員 lapwing 的故障。 https://git.postgresql.org/pg/commitdiff/0bd65a3905706927cdd6b3158b6457c1c854471b
修復重複的 typedef LogicalTape。使 buildfarm 成員 locust 滿意。 https://git.postgresql.org/pg/commitdiff/aa3ac6453b28049b3198433b75228271b7612d4a
修復由平衡合併補丁損壞的並行排序。在並行工作程序中跳過了每個合併迭代中初始化磁帶的程式碼。在重新定位補丁時,我將 !WORKER(state) 檢查放錯了位置。這導致了 'multiple-row-versions' 隔離測試中索引構建的失敗,在多個 buildfarm 成員上。在我的筆記型電腦上,透過在更大的表上構建索引可以更容易地重現,這樣就可以更可靠地獲得並行排序。 https://git.postgresql.org/pg/commitdiff/fc0f3b4cb0e882a9c5d51c302d4aa3591e4f80fd
Álvaro Herrera 提交
使正在附加/分離的表的子分割槽失效。未能做到這一點,對這些分割槽的任何直接插入/更新都將無法強制執行正確的約束,即考慮其父表的新分割槽約束的約束。回溯到 10。報告人:Hou Zhijie houzj.fnst@fujitsu.com 作者:Amit Langote amitlangote09@gmail.com 作者:Álvaro Herrera alvherre@alvh.no-ip.org 審閱者:Nitin Jadhav nitinjadhavpostgres@gmail.com 審閱者:Pavel Borisov pashkin.elfe@gmail.com 討論:https://postgr.es/m/OS3PR01MB5718DA1C4609A25186D1FBF194089%40OS3PR01MB5718.jpnprd01.prod.outlook.com https://git.postgresql.org/pg/commitdiff/d6f1e16c8fe27100e371a15aeeb498faa680ceed
在 ALTER ... RENAME 中確保使用正確的鎖級別。提交 1b5d797cd4f7 旨在放寬重新命名索引使用的鎖級別,但無意中允許任何關係都以較低的鎖級別進行重新命名,只要命令拼寫為 ALTER INDEX。對於其他關係型別來說,這是不可取的,因此如果關係不是索引,則嘗試使用較高的鎖級別重試操作。在此修復後,ALTER INDEX
保護測試中的排序差異。討論:https://postgr.es/m/YW/MYdSRQZtPFBWR@paquier.xyz https://git.postgresql.org/pg/commitdiff/cd124d205c42a623b68cd155ace94cc376851b78
Daniel Gustafsson 提交
修復 pg_basebackup 和 pg_dump 中的 sscanf 限制。確保字串解析受到目標緩衝區大小的限制。在 pg_basebackup 中,伺服器傳送的可用值限制為兩個字元,因此沒有溢位風險。在 pg_dump 中,緩衝區由 MAXPGPATH 限制,因此必須透過預處理器展開插入限制,並將緩衝區增加一個以容納終止符。這裡沒有溢位風險,因為在這種情況下,掃描的緩衝區比目標緩衝區小。將 pg_basebackup 的修復回溯到引入它的 11 版本,並將 pg_dump 的修復回溯到 9.6。審閱者:Tom Lane 討論:https://postgr.es/m/B14D3D7B-F98C-4E20-9459-C122C67647FB@yesql.se 向後移植到:11 和 9.6 https://git.postgresql.org/pg/commitdiff/1d7641d51a51aa00dff685022fab6c03be8f8af8
修復 TOC 檔案錯誤訊息列印中的錯誤。如果 blob TOC 檔案無法解析,錯誤訊息將無法列印檔名,因為儲存它的變數被解析的目標緩衝區所覆蓋。當檔名解析失敗時,錯誤將列印一個空字串:“./pg_restore -d foo -F d dump pg_restore: error: invalid line in large object TOC file "":..”,而不是預期的錯誤訊息:“./pg_restore -d foo -F d dump pg_restore: error: invalid line in large object TOC file "dump/blobs.toc":..”。透過重新命名兩個變數來修復,因為共享名稱太通用,無法同時儲存兩者並傳達變數的內容。回溯到 9.6。審閱者:Tom Lane 討論:https://postgr.es/m/A2B151F5-B32B-4F2C-BA4A-6870856D9BDE@yesql.se 向後移植到:9.6 https://git.postgresql.org/pg/commitdiff/998d060f3db79c6918cb4a547695be150833f9a4
重構 sslfiles Makefile 目標以方便使用。Makefile 處理 TLS 測試使用的證書和金鑰對變得相當難以處理。新增新證書而無需重新生成所有內容過於複雜。此補丁重構了 sslfiles make 目標,使得新增新證書只需要新增一個 .config 檔案,將其新增到 Makefile 的頂部,然後執行 make sslfiles。改進:- 檔案依賴關係應已修復,CRL 目錄除外。- 新證書的序列號基於當前時間,減少了衝突的可能性。- CA 索引狀態按需建立,並在 Make 執行結束時自動清理。- `*.config` 檔案現在是自包含的;一個證書需要一個配置檔案而不是兩個。- 重複程式碼減少,並隨之減少了一些不必要的程式碼(和可能的複製貼上錯誤)。- 所有配置檔案都放在 conf/ 目錄下。該目標已移動到其自己的 makefile 中,以避免與全域性 make 設定衝突。作者:Jacob Champion pchampion@vmware.com 審閱者:Michael Paquier michael@paquier.xyz 討論:https://postgr.es/m/d15a9838344ba090e09fd866abf913584ea19fb7.camel@vmware.com https://git.postgresql.org/pg/commitdiff/b4c4a00eada3c512e819e9163114a5ad1606bc7e
修復 32 位 Perl 上的 SSL 測試。證書序列號生成在 b4c4a00ea 中更改為使用當前時間戳。因此,testharness 必須使用 "openssl x509" 來查詢證書的序列號,該命令以十六進位制格式發出序列號。將序列號轉換為整數格式以匹配 pg_stat_ssl 中使用的格式需要一個 64 位相容的 Perl。這在 32 位 Perl 測試時增加了回退到檢查整數的選項。根據 buildfarm 成員 prairiedog 的故障。討論:https://postgr.es/m/0D295F43-806D-4B3F-AB98-F941A19E0271@yesql.se https://git.postgresql.org/pg/commitdiff/0c04342b1d3dd5b24f795f94874163be8e21710e
Tom Lane 提交
刪除 transformExpressionList() 中無效的斷言。我認為當我在提交 8f889b108 中新增此斷言時,我只考慮了 transformExpressionList 在 INSERT 和 VALUES 的頂層使用。但它也可以由 transformRowExpr() 呼叫,後者肯定會出現在 UPDATE 目標列表中,因此不能假設 p_multiassign_exprs 必須為空。此外,由於不期望輸入包含 ResTargets,因此它也沒有理由包含 MultiAssignRefs。因此,此程式碼無需擔心 p_multiassign_exprs 的狀態,我們應該刪除該斷言。根據 bug #17236 (來自 ocean_li_996)。它錯誤了多年,因此回溯到所有支援的分支。討論:https://postgr.es/m/17236-3210de9bcba1d7ca@postgresql.org https://git.postgresql.org/pg/commitdiff/697dd1925f418c9f54ee1fd1cefbc613d6504b1f
修復複合型別上域陣列的賦值。更新“UPDATE ... SET fld[n].subfld = whatever”在陣列元素是域而不是普通複合型別時失敗。這是因為 isAssignmentIndirectionExpr() 未能處理在這種情況下出現在表示式樹中的 CoerceToDomain 節點。結果通常會導致崩潰,即使我們意外地沒有崩潰,我們也無法正確保留同一陣列元素的其他欄位。根據 Onder Kalaci 的報告。回溯到 v11,域陣列是在那時引入的。討論:https://postgr.es/m/PH0PR21MB132823A46AA36F0685B7A29AD8BD9@PH0PR21MB1328.namprd21.prod.outlook.com https://git.postgresql.org/pg/commitdiff/3e310d837a9b3de8ad977c0a3e2a769bcdf61cc9
pg_dump:重組 getTables()。與 047329624、ed2c7f65b 和 daa9fe8a5 類似,透過只保留伺服器版本通用的查詢部分的一個副本,減少程式碼重複;並使條件控制的程式碼量儘可能小。這也消除了我們之前在這裡擁有的各種方式實現的令人困惑的組合。順便說一下,確保函式中所有三個相關部分都以相同的順序列出欄位。這當然只是為了整潔。討論:https://postgr.es/m/1240992.1634419055@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/4438eb4a495c977d8ac485dd6e544c2b6e077deb
改進 pg_regress.c 發出 psql 命令的基礎設施。支援對單個 psql 呼叫發出多個 "-c command" 開關。這允許將一些以前需要兩次或更多次後端啟動才能完成的操作合併到單個會話中。特別是,我們可以將 DROP DATABASE 作為 -c 命令之一發出,而不會出現“DROP DATABASE 不能在事務塊內執行”。除了減少所需的會話數量外,此補丁還抑制了以前在 pg_regress 的 DROP DATABASE(或 ROLE)IF NOT EXISTS 呼叫期間生成的“NOTICE: database "foo" does not exist, skipping”雜音。這使我們離目標更近了一步,即在成功構建/測試期間不看到任何訊息。這也消除了對發出的命令長度的一些硬編碼限制。我認為我們還沒有接近觸及這些限制,但擺脫限制令人安心。補丁由我提供,但感謝 Nathan Bossart 啟動了討論。討論:https://postgr.es/m/DCBAE0E4-BD56-482F-8A70-7FD0DC0860BE@amazon.com https://git.postgresql.org/pg/commitdiff/f45dc59a38cab1d2af6baaedb79559fe2e9b3781
文件:澄清 simplehash.h 的一個關鍵且未被記錄的方面。我剛剛因為嘗試使用 pg_malloc 而不是 pg_malloc0 而被它坑了。透過不讓這個 API 細節未被記錄,為下一個駭客節省一些時間。 https://git.postgresql.org/pg/commitdiff/b1ce6c284366ce1dae120f5d10dd59e8804322ee
pg_dump:修復了錯誤轉儲非全域性預設許可權。非全域性預設許可權條目應按原樣轉儲,而不是相對於其物件型別的預設 ACL。這通常只在您撤銷了全域性條目中某些預設啟用的許可權,然後在非全域性條目中再次授予它們時才重要。根據 Boris Korzun 的報告。這是一箇舊錯誤,因此回溯到所有支援的分支。Neil Chen,測試用例由 Masahiko Sawada 提供 討論:https://postgr.es/m/111621616618184@mail.yandex.ru 討論:https://postgr.es/m/CAA3qoJnr2+1dVJObNtfec=qW4Z0nz=A9+r5bZKoTSy5RDjskMw@mail.gmail.com https://git.postgresql.org/pg/commitdiff/2acc84c6fd299125702c8a8af13820abcc0d4891
修復 simplehash.h 中前端版本的 sh_error()。程式碼不期望 sh_error() 返回,但使此標頭檔案在前端可用的補丁並未注意到這一點。在此過程中,將 unlikely() 應用於決定是否呼叫 sh_error() 的測試,並添加了我們標準的版權宣告。由 Andres Freund 注意到。回溯到 v13,當時引入了此前端支援。討論:https://postgr.es/m/0D54435C-1199-4361-9D74-2FBDCF8EA164@anarazel.de https://git.postgresql.org/pg/commitdiff/974aedcea46dfd0119eea2fbb2eeacd232596f05
在 pg_dump 中,使用 simplehash.h 按 OID 查詢可轉儲物件。建立一個按 CatalogId(即目錄 OID + 物件 OID)索引可轉儲物件的雜湊表。使用它來替換以前的 catalogIdMap 陣列,以及各種其他單個目錄索引陣列,以及擴充套件成員對映。原則上,這對於具有許多物件的資料庫應該更快,因為查詢現在是 O(1) 而不是 O(log N)。然而,這些查詢在上下文中幾乎可以忽略不計,因此無法測量整體效能變化。但只有一個查詢資料結構需要維護,這使得程式碼更簡單、更靈活,所以我們還是這樣做吧。討論:https://postgr.es/m/2595220.1634855245@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/92316a4582a5714d4e494aaf90360860e7fec37a
修復 pg_dump 中的少量記憶體洩漏。我透過在 "valgrind --leak-check=full" 下執行 pg_dump 來發現這些問題。flagInhIndexes() 和 getIndexes() 中的更改將分配一個數組(我們只使用其中一些元素)替換為僅分配實際需要的物件的單個分配。之前的編碼浪費了一些記憶體,但更重要的是它混淆了 valgrind 的洩漏跟蹤。collectComments() 和 collectSecLabels() 仍然是 valgrind 報告中的主要汙點,因為它們沒有 PQclear 它們的查詢結果,以避免大量的 strdup。這是一個有爭議的權衡,但我會在這裡放著不管;即將進行的補丁將修改這些函式,足以更改此權衡。 https://git.postgresql.org/pg/commitdiff/70bef494000e4dbbeca0f0a40347ca1747aea701
Andres Freund 提交
Amit Kapila 提交
Andrew Dunstan 推送
將模組構建目錄新增到 TAP 測試的 PATH。對於非 MSVC 構建,這是 make 的 $(CURDIR),而對於 MSVC 構建,它是 $topdir/$Config/$module。該目錄被新增到 PATH 的第二個元素,以便安裝位置優先,但新增的 PATH 元素優先於 PATH 的其餘部分。這樣做的原因是為了允許測試找到未安裝的構建產品,例如 libpq_pipeline 測試驅動程式。libpq_pipeline 測試已調整為利用此功能。基於 Andres Freund 的建議。回溯到 14 版本。討論:https://postgr.es/m/4941f5a5-2d50-1a0e-6701-14c5fefe92d6@dunslane.net https://git.postgresql.org/pg/commitdiff/f4ce6c4d3a30ec3a12c7f64b90a6fc82887ddd7b
將 Perl 測試模組移至更好的名稱空間。我們 TAP 測試框架中的五個模組都位於頂層名稱空間。這是不明智的,因為即使我們不將它們匯出到 CPAN,這些名稱也可能洩露,例如如果它們被 RPM 構建過程匯出。因此,我們將模組移動到 PostgreSQL::Test 名稱空間。在此過程中,PostgresNode 被重新命名為 Cluster,TestLib 被重新命名為 Utils。PostgresVersion 變為 PostgreSQL::Version,以避免混淆它是什麼的版本。討論:https://postgr.es/m/aede93a4-7d92-ef26-398f-5094944c2504@dunslane.net 由 Erik Rijkers 和 Michael Paquier 審閱 https://git.postgresql.org/pg/commitdiff/b3b4d8e68ae83f432f43f035c7eb481ef93e1583
Noah Misch 推送
避免 RelationBuildDesc() 中影響 CREATE INDEX CONCURRENTLY 的競態條件。CIC 和 REINDEX CONCURRENTLY 假定後端看到的目錄更改不晚於每個後端下一次事務開始。當後端在執行 CIC 索引的 RelationBuildDesc() 過程中吸收了相關的無效化時,這種情況會失敗。使用由此產生的索引的查詢可能會悄悄地找不到行。透過使 RelationBuildDesc() 迴圈直到它完成而無需接受相關無效化來修復未來的索引構建。可能需要重新索引才能從過去的事件中恢復;REINDEX CONCURRENTLY 即可。回溯到 9.6(所有支援的版本)。Noah Misch 和 Andrey Borodin,由 Andres Freund 審閱(在早期版本中)。討論:https://postgr.es/m/20210730022548.GA1940096@gust.leadboat.com https://git.postgresql.org/pg/commitdiff/fdd965d074d46765c295223b119ca437dbcac973
修復針對最新準備事務的 CREATE INDEX CONCURRENTLY。提交 8a54e12a38d1545d249f1402f66c8cde2837d97c 的目的是修復此問題,並且在 PREPARE TRANSACTION 在 CIC 查詢鎖衝突之前完成時就足夠了。否則,事情仍然會出錯。與以前一樣,在已啟用準備事務的情況下使用 CIC 的叢集中,使用由此產生的索引的查詢可能會悄悄地找不到行。可能需要重新索引才能從過去的事件中恢復;REINDEX CONCURRENTLY 即可。透過使 CIC 等待任意近期的準備事務以及可能尚未 PREPARE TRANSACTION 的普通事務來修復未來的索引構建。作為其中的一部分,讓 PREPARE TRANSACTION 在呼叫 ProcArrayClearTransaction() 之前將鎖轉移到其虛擬 PGPROC。回溯到 9.6(所有支援的版本)。Andrey Borodin,由 Andres Freund 審閱(在早期版本中)。討論:https://postgr.es/m/01824242-AA92-4FE9-9BA7-AEBAFFEA3D0C@yandex-team.ru https://git.postgresql.org/pg/commitdiff/3cd9c3b921977272e6650a5efbeade4203c4bca2