Skip to content

Commit 7acd35b

Browse files
Justin Pryzbyololobus
authored andcommitted
Specially handle toast relations during REINDEX.
Is this fine ? It says "cannot reindex system catalogs concurrently" (once), and hits the pg_toast tables for information_schema. Should it skip toast indexes (like it said) ? Or should it REINDEX them on the same tablespace? template1=# REINDEX DATABASE CONCURRENTLY template1 TABLESPACE pg_default; 2020-03-09 15:33:51.792 CDT [6464] WARNING: cannot reindex system catalogs concurrently, skipping all WARNING: cannot reindex system catalogs concurrently, skipping all 2020-03-09 15:33:51.794 CDT [6464] WARNING: skipping tablespace change of "pg_toast_12558_index" 2020-03-09 15:33:51.794 CDT [6464] DETAIL: Cannot move system relation, only REINDEX CONCURRENTLY is performed. WARNING: skipping tablespace change of "pg_toast_12558_index" DETAIL: Cannot move system relation, only REINDEX CONCURRENTLY is performed. 2020-03-09 15:33:51.924 CDT [6464] WARNING: skipping tablespace change of "pg_toast_12543_index" 2020-03-09 15:33:51.924 CDT [6464] DETAIL: Cannot move system relation, only REINDEX CONCURRENTLY is performed. WARNING: skipping tablespace change of "pg_toast_12543_index" DETAIL: Cannot move system relation, only REINDEX CONCURRENTLY is performed. 2020-03-09 15:33:51.982 CDT [6464] WARNING: skipping tablespace change of "pg_toast_12548_index" 2020-03-09 15:33:51.982 CDT [6464] DETAIL: Cannot move system relation, only REINDEX CONCURRENTLY is performed. WARNING: skipping tablespace change of "pg_toast_12548_index" DETAIL: Cannot move system relation, only REINDEX CONCURRENTLY is performed. 2020-03-09 15:33:52.048 CDT [6464] WARNING: skipping tablespace change of "pg_toast_12553_index" 2020-03-09 15:33:52.048 CDT [6464] DETAIL: Cannot move system relation, only REINDEX CONCURRENTLY is performed. WARNING: skipping tablespace change of "pg_toast_12553_index" DETAIL: Cannot move system relation, only REINDEX CONCURRENTLY is performed. REINDEX
1 parent 507a6ed commit 7acd35b

File tree

2 files changed

+28
-12
lines changed

2 files changed

+28
-12
lines changed

src/backend/catalog/index.c

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3474,11 +3474,23 @@ reindex_index(Oid indexId, Oid tablespaceOid, bool skip_constraint_checks,
34743474
RelationGetRelationName(iRel));
34753475

34763476
/*
3477-
* We don't support moving system relations into different tablespaces,
3478-
* unless allow_system_table_mods=1.
3477+
* Skip tablespace change of all indexes on TOAST tables, unless
3478+
* allow_system_table_mods=1, but error out on system catalog.
34793479
*/
3480-
if (set_tablespace &&
3481-
!allowSystemTableMods && IsSystemRelation(iRel))
3480+
if (set_tablespace && IsToastRelation(iRel))
3481+
{
3482+
if (!allowSystemTableMods)
3483+
{
3484+
ereport(WARNING,
3485+
(errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
3486+
errmsg("skipping tablespace change of \"%s\"",
3487+
RelationGetRelationName(iRel)),
3488+
errdetail("Cannot move system relation, only REINDEX is performed.")));
3489+
set_tablespace = false;
3490+
}
3491+
}
3492+
else if (set_tablespace &&
3493+
IsCatalogRelationOid(indexId) && !allowSystemTableMods)
34823494
ereport(ERROR,
34833495
(errcode(ERRCODE_INSUFFICIENT_PRIVILEGE),
34843496
errmsg("permission denied: \"%s\" is a system catalog",

src/backend/commands/indexcmds.c

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3061,14 +3061,17 @@ ReindexRelationConcurrently(Oid relationOid, Oid tablespaceOid, int options)
30613061

30623062
/*
30633063
* We don't support moving system relations into different tablespaces,
3064-
* unless allow_system_table_mods=1.
3064+
* unless allow_system_table_mods=1. Reindexing concurrently is not
3065+
* allowed for system catalog, so we only check for indexes on
3066+
* TOAST tables here.
30653067
*/
3066-
if (OidIsValid(tablespaceOid) &&
3067-
!allowSystemTableMods && IsSystemRelation(indexRel))
3068-
ereport(ERROR,
3069-
(errcode(ERRCODE_INSUFFICIENT_PRIVILEGE),
3070-
errmsg("permission denied: \"%s\" is a system catalog",
3071-
RelationGetRelationName(indexRel))));
3068+
if (OidIsValid(tablespaceOid)
3069+
&& IsToastRelation(indexRel) && !allowSystemTableMods)
3070+
ereport(WARNING,
3071+
(errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
3072+
errmsg("skipping tablespace change of \"%s\"",
3073+
RelationGetRelationName(indexRel)),
3074+
errdetail("Cannot move system relation, only REINDEX CONCURRENTLY is performed.")));
30723075

30733076
/*
30743077
* We cannot support moving mapped relations into different tablespaces.
@@ -3099,7 +3102,8 @@ ReindexRelationConcurrently(Oid relationOid, Oid tablespaceOid, int options)
30993102
/* Create new index definition based on given index */
31003103
newIndexId = index_concurrently_create_copy(heapRel,
31013104
indexId,
3102-
tablespaceOid,
3105+
IsToastRelation(indexRel) && !allowSystemTableMods ?
3106+
InvalidOid : tablespaceOid,
31033107
concurrentName);
31043108

31053109
/*

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy