drop-temp-schema-adjust-v4.patch
text/x-diff
Filename: drop-temp-schema-adjust-v4.patch
Type: text/x-diff
Part: 0
Patch
Format: unified
Series: patch v4
| File | + | − |
|---|---|---|
| src/backend/catalog/namespace.c | 6 | 2 |
| src/backend/postmaster/autovacuum.c | 17 | 8 |
diff --git a/src/backend/catalog/namespace.c b/src/backend/catalog/namespace.c
index c82f9fc4b5..0987986a8f 100644
--- a/src/backend/catalog/namespace.c
+++ b/src/backend/catalog/namespace.c
@@ -3235,10 +3235,14 @@ isTempNamespaceInUse(Oid namespaceId)
backendId = GetTempNamespaceBackendId(namespaceId);
- if (backendId == InvalidBackendId ||
- backendId == MyBackendId)
+ /* No such temporary namespace? */
+ if (backendId == InvalidBackendId)
return false;
+ /* Is the namespace used by this backend? */
+ if (backendId == MyBackendId)
+ return true;
+
/* Is the backend alive? */
proc = BackendIdGetProc(backendId);
if (proc == NULL)
diff --git a/src/backend/postmaster/autovacuum.c b/src/backend/postmaster/autovacuum.c
index f0e40e36af..d8702d650a 100644
--- a/src/backend/postmaster/autovacuum.c
+++ b/src/backend/postmaster/autovacuum.c
@@ -2071,9 +2071,11 @@ do_autovacuum(void)
{
/*
* We just ignore it if the owning backend is still active and
- * using the temporary schema.
+ * using the temporary schema. If the namespace does not exist
+ * ignore the entry.
*/
- if (!isTempNamespaceInUse(classForm->relnamespace))
+ if (!isTempNamespaceInUse(classForm->relnamespace) &&
+ get_namespace_name(classForm->relnamespace) != NULL)
{
/*
* The table seems to be orphaned -- although it might be that
@@ -2202,6 +2204,7 @@ do_autovacuum(void)
Oid relid = lfirst_oid(cell);
Form_pg_class classForm;
ObjectAddress object;
+ char *nspname;
/*
* Check for user-requested abort.
@@ -2249,12 +2252,18 @@ do_autovacuum(void)
continue;
}
- /* OK, let's delete it */
- ereport(LOG,
- (errmsg("autovacuum: dropping orphan temp table \"%s.%s.%s\"",
- get_database_name(MyDatabaseId),
- get_namespace_name(classForm->relnamespace),
- NameStr(classForm->relname))));
+ nspname = get_namespace_name(classForm->relnamespace);
+
+ if (nspname != NULL)
+ ereport(LOG,
+ (errmsg("autovacuum: dropping orphan temp table \"%s.%s.%s\"",
+ get_database_name(MyDatabaseId),
+ nspname, NameStr(classForm->relname))));
+ else
+ ereport(LOG,
+ (errmsg("autovacuum: dropping orphan temp table \"%s\" with OID %u in database \"%s\"",
+ NameStr(classForm->relname), relid,
+ get_database_name(MyDatabaseId))));
object.classId = RelationRelationId;
object.objectId = relid;