From 4b445479f9e0ea5039c782e9dab35ec9af6b6d4d Mon Sep 17 00:00:00 2001 From: Fujii Masao Date: Wed, 16 Sep 2026 18:36:43 +0900 Subject: [PATCH] Suppress progress reporting when creating TOAST indexes MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Previously, when REPACK, CLUSTER, or VACUUM FULL created a transient TOAST table, index_rebuild_count in pg_stat_progress_repack and pg_stat_progress_cluster reported 2 before any indexes on the main table had been rebuilt. This could mislead users monitoring the operation. This happened because creating the TOAST index writes the CREATE INDEX phase to the same progress slot used for the index rebuild count of the enclosing command. Fix this by passing INDEX_CREATE_SUPPRESS_PROGRESS when creating a TOAST index, preserving the progress information of the enclosing command and keeping the count at zero until the main-table indexes are rebuilt. Author: Adam Lee Reviewed-by: Fujii Masao Reviewed-by: Álvaro Herrera Discussion: https://postgr.es/m/aj4gJQMba0kClQmj@Mac Backpatch-through: 19 --- src/backend/catalog/toasting.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/backend/catalog/toasting.c b/src/backend/catalog/toasting.c index 66dbbae66e2..3058ec14223 100644 --- a/src/backend/catalog/toasting.c +++ b/src/backend/catalog/toasting.c @@ -380,6 +380,10 @@ create_toast_table(Relation rel, Oid toastOid, Oid toastIndexOid, coloptions[0] = 0; coloptions[1] = 0; + /* + * Don't let index creation overwrite progress information for the command + * that caused the TOAST table to be created. + */ index_create(toast_rel, toast_idxname, toastIndexOid, InvalidOid, InvalidOid, InvalidOid, indexInfo, @@ -387,7 +391,8 @@ create_toast_table(Relation rel, Oid toastOid, Oid toastIndexOid, BTREE_AM_OID, rel->rd_rel->reltablespace, collationIds, opclassIds, NULL, coloptions, NULL, (Datum) 0, - INDEX_CREATE_IS_PRIMARY, 0, true, true, NULL); + INDEX_CREATE_IS_PRIMARY | INDEX_CREATE_SUPPRESS_PROGRESS, + 0, true, true, NULL); table_close(toast_rel, NoLock);