diff --git a/src/backend/postmaster/autovacuum.c b/src/backend/postmaster/autovacuum.c index 460d30ef31..a0d8711be9 100644 --- a/src/backend/postmaster/autovacuum.c +++ b/src/backend/postmaster/autovacuum.c @@ -1983,8 +1983,17 @@ do_autovacuum(void) bool doanalyze; bool wraparound; + /* + * While RELKIND_RELATION and RELKIND_MATVIEW are used for vacuuming, + * RELKIND_RELATION, RELKIND_SEQUENCE, RELKIND_VIEW, and + * RELKIND_PARTITIONED_TABLE are used for cleaning up orphaned temporary + * relations. + */ if (classForm->relkind != RELKIND_RELATION && - classForm->relkind != RELKIND_MATVIEW) + classForm->relkind != RELKIND_MATVIEW && + classForm->relkind != RELKIND_SEQUENCE && + classForm->relkind != RELKIND_VIEW && + classForm->relkind != RELKIND_PARTITIONED_TABLE) continue; relid = classForm->oid; @@ -2014,6 +2023,10 @@ do_autovacuum(void) continue; } + if (classForm->relkind != RELKIND_RELATION && + classForm->relkind != RELKIND_MATVIEW) + continue; + /* Fetch reloptions and the pgstat entry for this table */ relopts = extract_autovac_opts(tuple, pg_class_desc); tabentry = pgstat_fetch_stat_tabentry_ext(classForm->relisshared, @@ -2163,7 +2176,9 @@ do_autovacuum(void) * completely unrelated to the one we saw before. */ if (!((classForm->relkind == RELKIND_RELATION || - classForm->relkind == RELKIND_MATVIEW) && + classForm->relkind == RELKIND_SEQUENCE || + classForm->relkind == RELKIND_VIEW || + classForm->relkind == RELKIND_PARTITIONED_TABLE) && classForm->relpersistence == RELPERSISTENCE_TEMP)) { UnlockRelationOid(relid, AccessExclusiveLock);