Hi all,

Attached is a patch that adds a hook, AcquireSampleRowsFunc_hook, allowing 
extensions to override the row sampling function used during ANALYZE for 
regular heap relations.

Motivation

Extensions that implement horizontal scaling of tables currently have no clean 
way to participate in ANALYZE's row sampling. The default acquire_sample_rows() 
only knows how to sample the local heap, so a distributed-table extension 
wanting accurate statistics has to either:

maintain its own separate stats-collection machinery outside of ANALYZE 
entirely, or

duplicate/reimplement parts of analyze.c's sampling logic to pull rows from 
remote nodes.


This hook lets such an extension plug into the existing ANALYZE code path and 
supply its own row acquisition function, without having to reinvent stats 
collection or duplicate logic that already exists in core.

What the patch does

Adds AcquireSampleRowsFunc_hook (typed identically to AcquireSampleRowsFunc) in 
vacuum.h.

In analyze.c, both analyze_rel() and acquire_inherited_sample_rows() check the 
hook and use it in place of acquire_sample_rows() when set.

Adds doc text in xfunc.sgml describing the hook's contract (fill rows[] up to 
targrows, set *totalrows).

Adds a regression test confirming ANALYZE still completes normally with the 
hook unset (the hook itself needs a C extension to exercise meaningfully, so 
this just guards against regressions in the unset case).


​Regards, 

Samba Siva Reddy 

http://sambasivareddy.in

Attachment: v1-acquire-sample-rows-hook.patch
Description: Binary data

Reply via email to