stats-locking-v2.patch

text/plain

Filename: stats-locking-v2.patch
Type: text/plain
Part: 0
Message: Re: Missing dependency tracking for TableFunc nodes

Patch

Format: unified
Series: patch v2
File+
src/backend/optimizer/util/plancat.c 6 1
diff --git a/src/backend/optimizer/util/plancat.c b/src/backend/optimizer/util/plancat.c
index 5e889d1861..a1e325615c 100644
--- a/src/backend/optimizer/util/plancat.c
+++ b/src/backend/optimizer/util/plancat.c
@@ -46,6 +46,7 @@
 #include "rewrite/rewriteManip.h"
 #include "statistics/statistics.h"
 #include "storage/bufmgr.h"
+#include "storage/lmgr.h"
 #include "utils/builtins.h"
 #include "utils/lsyscache.h"
 #include "utils/partcache.h"
@@ -1305,9 +1306,13 @@ get_relation_statistics(RelOptInfo *rel, Relation relation)
 		Bitmapset  *keys = NULL;
 		int			i;
 
+		LockDatabaseObject(StatisticExtRelationId, statOid, 0, AccessShareLock);
+
+		/* we may get invalid tuple, if the statistic just got dropped */
 		htup = SearchSysCache1(STATEXTOID, ObjectIdGetDatum(statOid));
 		if (!HeapTupleIsValid(htup))
-			elog(ERROR, "cache lookup failed for statistics object %u", statOid);
+			continue;
+
 		staForm = (Form_pg_statistic_ext) GETSTRUCT(htup);
 
 		dtup = SearchSysCache1(STATEXTDATASTXOID, ObjectIdGetDatum(statOid));