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