Hi Alvaro,
There were some minor problems in v5 -- bogus Docbook as well as outdated rules.out, small "git diff --check" complaint about whitespace. This v6 (on today's master) fixes those, no other changes.
Thanks for fixing that. :)
I'll test it later. I think we have to address the following comment from Robert. Right? Do you have any ideas?
I'm not a fan of the way you set the scan-table phase and inh flag in one place, and then slightly later set the relation OID and block count. That creates a race during which users could see the first bit of data set and the second not set. I don't see any reason not to set all four fields together.Hmm... I understand but it's little difficult because if there are child rels, acquire_inherited_sample_rows() calls acquire_sample_rows() (See below). So, it is able to set all four fields together if inh flag is given as a parameter of those functions, I suppose. But I'm not sure whether it's okay to add the parameter to both functions or not. Do you have any ideas? # do_analyze_rel() ... if (inh) numrows = acquire_inherited_sample_rows(onerel, elevel, rows, targrows, &totalrows, &totaldeadrows); else numrows = (*acquirefunc) (onerel, elevel, rows, targrows, &totalrows, &totaldeadrows); # acquire_inherited_sample_rows() ... foreach(lc, tableOIDs) { ... /* Check table type (MATVIEW can't happen, but might as well allow) */ if (childrel->rd_rel->relkind == RELKIND_RELATION || childrel->rd_rel->relkind == RELKIND_MATVIEW) { /* Regular table, so use the regular row acquisition function */ acquirefunc = acquire_sample_rows; ... /* OK, we'll process this child */ has_child = true; rels[nrels] = childrel; acquirefuncs[nrels] = acquirefunc; ... } ... for (i = 0; i < nrels; i++) { ... AcquireSampleRowsFunc acquirefunc = acquirefuncs[i]; ... if (childtargrows > 0) { ... /* Fetch a random sample of the child's rows */ childrows = (*acquirefunc) (childrel, elevel, rows + numrows, childtargrows, &trows, &tdrows)
Thanks, Tatsuro Yamada
