diff options
Diffstat (limited to 'src/backend/commands/analyze.c')
-rw-r--r-- | src/backend/commands/analyze.c | 12 |
1 files changed, 7 insertions, 5 deletions
diff --git a/src/backend/commands/analyze.c b/src/backend/commands/analyze.c index 1d6301bac16..a9ddb2c2807 100644 --- a/src/backend/commands/analyze.c +++ b/src/backend/commands/analyze.c @@ -26,6 +26,7 @@ #include "catalog/pg_inherits_fn.h" #include "catalog/pg_namespace.h" #include "commands/dbcommands.h" +#include "commands/tablecmds.h" #include "commands/vacuum.h" #include "executor/executor.h" #include "miscadmin.h" @@ -1408,14 +1409,15 @@ acquire_inherited_sample_rows(Relation onerel, HeapTuple *rows, int targrows, /* * Check that there's at least one descendant, else fail. This could * happen despite analyze_rel's relhassubclass check, if table once had a - * child but no longer does. + * child but no longer does. In that case, we can clear the + * relhassubclass field so as not to make the same mistake again later. + * (This is safe because we hold ShareUpdateExclusiveLock.) */ if (list_length(tableOIDs) < 2) { - /* - * XXX It would be desirable to clear relhassubclass here, but we - * don't have adequate lock to do that safely. - */ + /* CCI because we already updated the pg_class row in this command */ + CommandCounterIncrement(); + SetRelationHasSubclass(RelationGetRelid(onerel), false); return 0; } |