Hi Ashutosh, 

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.


Thanks for the suggestion. To clarify, this is not FDW-based sharding. The 
shards here are plain PostgreSQL tables distributed across the nodes like 
Citus, when a table is distributed, the base table remains on the coordinator 
and its shards spread across the workers as regular PostgreSQL heap tables.

Since there are no foreign tables involved, the FDW stats-fetching mechanism 
does not apply here. The base table holds no actual row data, but the shards as 
the real data - which is precisely the gap AcquireSampleRowsFunc_hook is meant 
to address.

Happy to clarify further if needed.

Thanks,
Samba Siva Reddy








From: Ashutosh Bapat <[email protected]>
To: "Samba Siva Reddy Chinta"<[email protected]>
Cc: "pgsql-hackers"<[email protected]>
Date: Fri, 26 Jun 2026 18:11:50 +0530
Subject: Re: [PATCH] Add hook for plugins to acquire sample rows during ANALYZE



Hi Samba Siva, 
 
On Fri, Jun 26, 2026 at 7:17 AM Samba Siva Reddy Chinta 
< mailto:[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 





Regards, 

Samba Siva Reddy 

http://sambasivareddy.in

Reply via email to