Hi Samba Siva,

On Fri, Jun 26, 2026 at 7:17 AM Samba Siva Reddy Chinta
<[email protected]> wrote:
>
> 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).
>

If you have implemented sharding using inheritance or partitioning and
FDW, the facility to fetch statistics of foreign tables from foreign
server can be useful here. IIUC, there is a limitation on using it for
inherited foreign tables, but it's worth exploring and improving for
your usecase.

-- 
Best Wishes,
Ashutosh Bapat


Reply via email to