v9-0004-Create-a-helper-function-for-cleaning-up-from-do_.patch

application/octet-stream

Filename: v9-0004-Create-a-helper-function-for-cleaning-up-from-do_.patch
Type: application/octet-stream
Part: 3
Message: Re: Add SKIP LOCKED to VACUUM and ANALYZE

Patch

Format: format-patch
Series: patch v9-0004
Subject: Create a helper function for cleaning up from do_analyze_rel().
File+
src/backend/commands/analyze.c 26 0
From 4991912b680a20d309781c44f09fdaaefdbecaab Mon Sep 17 00:00:00 2001
From: Nathan Bossart <bossartn@amazon.com>
Date: Wed, 5 Sep 2018 14:43:44 +0000
Subject: [PATCH v9 4/7] Create a helper function for cleaning up from
 do_analyze_rel().

---
 src/backend/commands/analyze.c | 26 ++++++++++++++++++++++++++
 1 file changed, 26 insertions(+)

diff --git a/src/backend/commands/analyze.c b/src/backend/commands/analyze.c
index dc73714819..26fa7bcd55 100644
--- a/src/backend/commands/analyze.c
+++ b/src/backend/commands/analyze.c
@@ -102,6 +102,9 @@ static void update_attstats(Oid relid, bool inh,
 				int natts, VacAttrStats **vacattrstats);
 static Datum std_fetch_func(VacAttrStatsP stats, int rownum, bool *isNull);
 static Datum ind_fetch_func(VacAttrStatsP stats, int rownum, bool *isNull);
+static void do_analyze_rel_cleanup(int save_nestlevel, Oid save_userid,
+					   int save_sec_context, MemoryContext caller_context,
+					   RangeVar *rangeVar, VacuumParams *params);
 
 
 /*
@@ -695,6 +698,29 @@ do_analyze_rel(Relation onerel, int options, VacuumParams *params,
 							pg_rusage_show(&ru0))));
 	}
 
+	/* pass NULL for the RangeVar to avoid the SKIP LOCKED message */
+	do_analyze_rel_cleanup(save_nestlevel, save_userid, save_sec_context,
+						   caller_context, NULL, params);
+}
+
+/*
+ * Convenience function for cleaning up before exiting do_analyze_rel().
+ *
+ * This also emits a "skipping analyze" log statement based on the rangeVar and
+ * params provided.  If rangeVar is NULL, no such log statement will be emitted.
+ */
+static void
+do_analyze_rel_cleanup(int save_nestlevel, Oid save_userid, int save_sec_context,
+					   MemoryContext caller_context, RangeVar *rangeVar, VacuumParams *params)
+{
+	int			elevel = get_elevel_for_skipped_relation(rangeVar, params);
+
+	if (elevel != 0)
+		ereport(elevel,
+				(errcode(ERRCODE_LOCK_NOT_AVAILABLE),
+				 errmsg("skipping analyze of \"%s\" --- lock not available",
+						rangeVar->relname)));
+
 	/* Roll back any GUC changes executed by index functions */
 	AtEOXact_GUC(false, save_nestlevel);
 
-- 
2.16.2