On Mon, Mar 1, 2021 at 11:22 AM Mark Dilger <mark.dil...@enterprisedb.com> wrote: > If bt_index_check() and bt_index_parent_check() are to have this > functionality, shouldn't there be an option controlling it much as the option > (heapallindexed boolean) controls checking whether all entries in the heap > are indexed in the btree? It seems inconsistent to have an option to avoid > checking the heap for that, but not for this.
I agree. Actually, it should probably use the same snapshot as the heapallindexed=true case. So either only perform unique constraint verification when that option is used, or invent a new option that will still share the snapshot used by heapallindexed=true (when the options are combined). > The regression test you provided is not portable. I am getting lots of > errors due to differing output of the form "page lsn=0/4DAD7E0". You might > turn this into a TAP test and use a regular expression to check the output. I would test this using a custom opclass that does simple fault injection. For example, an opclass that indexes integers, but can be configured to dynamically make 0 values equal or unequal to each other. That's more representative of real-world problems. You "break the warranty" by updating pg_index, even compared to updating other system catalogs. In particular, you break the "indcheckxmin wait -- wait for xmin to be old before using index" stuff in get_relation_info(). So it seems worse than updating pg_attribute, for example (which is something that the tests do already). -- Peter Geoghegan