From 0a53aaf589dfdbd2f25ae2ee36323d77c2910a60 Mon Sep 17 00:00:00 2001 From: Alvaro Herrera Date: Tue, 17 Oct 2017 12:58:38 +0200 Subject: [PATCH] Fix autovacuum workitems --- src/backend/postmaster/autovacuum.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/backend/postmaster/autovacuum.c b/src/backend/postmaster/autovacuum.c index 776b1c0a9d..83366b862c 100644 --- a/src/backend/postmaster/autovacuum.c +++ b/src/backend/postmaster/autovacuum.c @@ -2525,6 +2525,8 @@ deleted: continue; if (workitem->avw_active) continue; + if (workitem->avw_database != MyDatabaseId) + continue; /* claim this one, and release lock while performing it */ workitem->avw_active = true; @@ -2592,6 +2594,7 @@ perform_work_item(AutoVacuumWorkItem *workitem) char *cur_datname = NULL; char *cur_nspname = NULL; char *cur_relname = NULL; + Oid cur_nspoid; /* * Note we do not store table info in MyWorkerInfo, since this is not @@ -2607,9 +2610,12 @@ perform_work_item(AutoVacuumWorkItem *workitem) */ cur_relname = get_rel_name(workitem->avw_relation); - cur_nspname = get_namespace_name(get_rel_namespace(workitem->avw_relation)); + cur_nspoid = get_rel_namespace(workitem->avw_relation); + if (!cur_relname || !OidIsValid(cur_nspoid)) + goto deleted2; + cur_nspname = get_namespace_name(cur_nspoid); cur_datname = get_database_name(MyDatabaseId); - if (!cur_relname || !cur_nspname || !cur_datname) + if (!cur_nspname || !cur_datname) goto deleted2; autovac_report_workitem(workitem, cur_nspname, cur_datname); -- 2.11.0