Generalize relation analyze in table AM interface
authorAlexander Korotkov <akorotkov@postgresql.org>
Sat, 30 Mar 2024 20:34:04 +0000 (22:34 +0200)
committerAlexander Korotkov <akorotkov@postgresql.org>
Sat, 30 Mar 2024 20:34:04 +0000 (22:34 +0200)
commit27bc1772fc814946918a5ac8ccb9b5c5ad0380aa
treebeb4fac8dfb2756c86f3ac13ec21d72f69daa55c
parentb154d8a6d0e52e5f6b09739639fdf55fa88bc6b8
Generalize relation analyze in table AM interface

Currently, there is just one algorithm for sampling tuples from a table written
in acquire_sample_rows().  Custom table AM can just redefine the way to get the
next block/tuple by implementing scan_analyze_next_block() and
scan_analyze_next_tuple() API functions.

This approach doesn't seem general enough.  For instance, it's unclear how to
sample this way index-organized tables.  This commit allows table AM to
encapsulate the whole sampling algorithm (currently implemented in
acquire_sample_rows()) into the relation_analyze() API function.

Discussion: https://postgr.es/m/CAPpHfdurb9ycV8udYqM%3Do0sPS66PJ4RCBM1g-bBpvzUfogY0EA%40mail.gmail.com
Reviewed-by: Pavel Borisov, Matthias van de Meent
src/backend/access/heap/heapam_handler.c
src/backend/access/table/tableamapi.c
src/backend/commands/analyze.c
src/include/access/heapam.h
src/include/access/tableam.h
src/include/commands/vacuum.h
src/include/foreign/fdwapi.h