From 6ef01699d703389b69d43a1894b116ec611b8e32 Mon Sep 17 00:00:00 2001 From: Nathan Bossart 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