v7-0007-Create-a-helper-function-for-cleaning-up-from-do_.patch
application/octet-stream
Filename: v7-0007-Create-a-helper-function-for-cleaning-up-from-do_.patch
Type: application/octet-stream
Part: 6
Message:
Re: BUG #14941: Vacuum crashes
Patch
Format: format-patch
Series: patch v7-0007
Subject: Create a helper function for cleaning up from do_analyze_rel().
| File | + | − |
|---|---|---|
| src/backend/commands/analyze.c | 26 | 0 |
From 6ef01699d703389b69d43a1894b116ec611b8e32 Mon Sep 17 00:00:00 2001
From: Nathan Bossart <bossartn@amazon.com>
Date: Thu, 5 Apr 2018 17:37:54 +0000
Subject: [PATCH v7 07/12] 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 d9e31606ff..03e0bad1f3 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);
/*
@@ -705,6 +708,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