On Fri, Nov 17, 2017 at 03:43:52PM -0600, Justin Pryzby wrote: > On Fri, Nov 17, 2017 at 01:36:00PM -0300, Alvaro Herrera wrote: > > Justin Pryzby wrote: > > > > > Core was generated by `postgres: autovacuum worker process gtt > > > '. > > > Program terminated with signal 11, Segmentation fault. > > > #0 statext_ndistinct_build (totalrows=300, numrows=300, rows=0x21df3e8, > > > attrs=<value optimized out>, stats=0x0) at mvdistinct.c:103 > > > 103 item->attrs = > > > bms_add_member(item->attrs, > > > > > > (gdb) p stats > > > $5 = (VacAttrStats **) 0x0 > > > => This is an error, no ?? > > > > Not necessarily, but then I think this previous code is busted: > > > If I recall things correctly, the "continue" should be executed > > regardless of IsAutoVacuumWorkerProcess() (only the log should be > > conditional on that). I'm not sure how I arrived at the current coding, > > which I added in bf2a691e02d7 -- probably just fuzzy thinking. > > Is it useful to run with that change ?
FYI: the affected server ran without crashing since Nov 18 with this change. --- postgresql-10.1.orig/src/backend/statistics/extended_stats.c 2017-11-06 20:46:52.000000000 -0400 +++ postgresql-10.1/src/backend/statistics/extended_stats.c 2017-11-18 18:23:44.057988419 -0400 @@ -98,20 +98,21 @@ if (!stats && !IsAutoVacuumWorkerProcess()) { ereport(WARNING, (errcode(ERRCODE_INVALID_OBJECT_DEFINITION), errmsg("statistics object \"%s.%s\" could not be computed for relation \"%s.%s\"", stat->schema, stat->name, get_namespace_name(onerel->rd_rel->relnamespace), RelationGetRelationName(onerel)), errtable(onerel))); - continue; } + if (!stats) + continue; /* check allowed number of dimensions */ Assert(bms_num_members(stat->columns) >= 2 && bms_num_members(stat->columns) <= STATS_MAX_DIMENSIONS); /* compute statistic of each requested type */ foreach(lc2, stat->types) { char t = (char) lfirst_int(lc2); Justin
--- postgresql-10.1.orig/src/backend/statistics/extended_stats.c 2017-11-06 20:46:52.000000000 -0400 +++ postgresql-10.1/src/backend/statistics/extended_stats.c 2017-11-18 18:23:44.057988419 -0400 @@ -98,20 +98,21 @@ if (!stats && !IsAutoVacuumWorkerProcess()) { ereport(WARNING, (errcode(ERRCODE_INVALID_OBJECT_DEFINITION), errmsg("statistics object \"%s.%s\" could not be computed for relation \"%s.%s\"", stat->schema, stat->name, get_namespace_name(onerel->rd_rel->relnamespace), RelationGetRelationName(onerel)), errtable(onerel))); - continue; } + if (!stats) + continue; /* check allowed number of dimensions */ Assert(bms_num_members(stat->columns) >= 2 && bms_num_members(stat->columns) <= STATS_MAX_DIMENSIONS); /* compute statistic of each requested type */ foreach(lc2, stat->types) { char t = (char) lfirst_int(lc2);