Hi Mark, Thanks for the review. Please find my comments inline below:
> HeapTupleForceOption should be added to src/tools/pgindent/typedefs.list. > This has been fixed in the v9 patch. > > The tidcmp function can be removed, and ItemPointerCompare used directly by > qsort as: > > - qsort((void*) tids, ntids, sizeof(ItemPointerData), tidcmp); > + qsort((void*) tids, ntids, sizeof(ItemPointerData), > + (int (*) (const void *, const void *)) > ItemPointerCompare); > Will have a look into this. > > sanity_check_tid_array() has two error messages: > > "array must not contain nulls" > "empty tid array" > > I would change the first to say "tid array must not contain nulls", as "tid" > is the name of the parameter being checked. It is also more consistent with > the second error message, but that doesn't matter to me so much, as I'd argue > for removing the second check. I don't see why an empty array should draw an > error. It seems more reasonable to just return early since there is no work > to do. Consider if somebody uses a function that returns the tids for all > corrupt tuples in a table, aggregates that into an array, and hands that to > this function. It doesn't seem like an error for that aggregated array to > have zero elements in it. I suppose you could emit a NOTICE in this case? > This comment is no more valid as per the changes done in the v9 patch. > > Upthread: > > On Aug 13, 2020, at 12:03 PM, Robert Haas <robertmh...@gmail.com> wrote: > > > >> This looks like a very good suggestion to me. I will do this change in > >> the next version. Just wondering if we should be doing similar changes > >> in other contrib modules (like pgrowlocks, pageinspect and > >> pgstattuple) as well? > > > > It seems like it should be consistent, but I'm not sure the proposed > > change is really an improvement. > > You have used Asim's proposed check: > > if (rel->rd_amhandler != HEAP_TABLE_AM_HANDLER_OID) > ereport(ERROR, > (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), > errmsg("only the relation using heap_tableam_handler is > supported"))); > > which Robert seems unenthusiastic about, but if you are going that direction, > I think at least the language of the error message should be changed. I > recommend something like: > > if (rel->rd_amhandler != HEAP_TABLE_AM_HANDLER_OID) > ereport(ERROR, > (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), > - errmsg("only the relation using > heap_tableam_handler is supported"))); > + errmsg("\"%s\" does not use a heap access > method", > + > RelationGetRelationName(rel)))); > > where "a heap access method" could also be written as "a heap table type > access method", "a heap table compatible access method", and so forth. There > doesn't seem to be enough precedent to dictate exactly how to phrase this, or > perhaps I'm just not looking in the right place. > Same here. This also looks invalid as per the changes done in v9 patch. > > The header comment for function find_tids_one_page should state the > requirement that the tids array must be sorted. > Okay, will add a comment for this. > > The heap_force_common function contains multiple ereport(NOTICE,...) within a > critical section. I don't think that is normal practice. Can those reports > be buffered until after the critical section is exited? You also have a > CHECK_FOR_INTERRUPTS within the critical section. > This has been fixed in the v9 patch. > [1] https://commitfest.postgresql.org/29/2700/ > — Thanks for adding a commitfest entry for this. -- With Regards, Ashutosh Sharma EnterpriseDB:http://www.enterprisedb.com