Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'src/backend/commands/indexcmds.c')
-rw-r--r--src/backend/commands/indexcmds.c31
1 files changed, 24 insertions, 7 deletions
diff --git a/src/backend/commands/indexcmds.c b/src/backend/commands/indexcmds.c
index 9bc97e1fc21..403f5fc143f 100644
--- a/src/backend/commands/indexcmds.c
+++ b/src/backend/commands/indexcmds.c
@@ -1416,6 +1416,7 @@ DefineIndex(Oid relationId,
IndexStmt *childStmt = copyObject(stmt);
bool found_whole_row;
ListCell *lc;
+ ObjectAddress childAddr;
/*
* We can't use the same index name for the child index,
@@ -1469,15 +1470,25 @@ DefineIndex(Oid relationId,
Assert(GetUserId() == child_save_userid);
SetUserIdAndSecContext(root_save_userid,
root_save_sec_context);
- DefineIndex(childRelid, childStmt,
- InvalidOid, /* no predefined OID */
- indexRelationId, /* this is our child */
- createdConstraintId,
- -1,
- is_alter_table, check_rights, check_not_in_use,
- skip_build, quiet);
+ childAddr =
+ DefineIndex(childRelid, childStmt,
+ InvalidOid, /* no predefined OID */
+ indexRelationId, /* this is our child */
+ createdConstraintId,
+ -1,
+ is_alter_table, check_rights,
+ check_not_in_use,
+ skip_build, quiet);
SetUserIdAndSecContext(child_save_userid,
child_save_sec_context);
+
+ /*
+ * Check if the index just created is valid or not, as it
+ * could be possible that it has been switched as invalid
+ * when recursing across multiple partition levels.
+ */
+ if (!get_index_isvalid(childAddr.objectId))
+ invalidate_parent = true;
}
free_attrmap(attmap);
@@ -1507,6 +1518,12 @@ DefineIndex(Oid relationId,
ReleaseSysCache(tup);
table_close(pg_index, RowExclusiveLock);
heap_freetuple(newtup);
+
+ /*
+ * CCI here to make this update visible, in case this recurses
+ * across multiple partition levels.
+ */
+ CommandCounterIncrement();
}
}