FDW handling count(*) through AnalyzeForeignTable or other constant time push-down - Mailing list pgsql-hackers

From Gabe F. Rudy
Subject FDW handling count(*) through AnalyzeForeignTable or other constant time push-down
Date
Msg-id SN1PR17MB033428EDC1DD6A65CFD818D5D4A60@SN1PR17MB0334.namprd17.prod.outlook.com
Whole thread Raw
Responses Re: FDW handling count(*) through AnalyzeForeignTable or other constant time push-down
Re: FDW handling count(*) through AnalyzeForeignTable or other constant time push-down
List pgsql-hackers

Hey all,

 

I’m building a FDW around a column-store backend (similar to CStore but for genomic data!).

 

I have tables in the billions of rows, and have a common query pattern of asking for the table size (i.e. SELECT COUNT(*) FROM big_fdw_table; ).

 

This is a read-optimized system in which I know in constant time the exact dimensions of the table.

 

Is there any way to convince Postgres FDW to leverage the analyze row counts or even the “double* totalRowCount” returned from the AcquireSampleRows callback from my AnalyzeForeignTable function so that it does not do a full-table scan for a COUNT(*) etc?

 

My current fallback is to export a specialized function that returns the table row count for a given FDW table, but that then leaks into the user-application driving these queries.

 

Thanks in advance!

Gabe

 

Gabe Rudy | VP Product & Engineering | Golden Helix, Inc.

 

pgsql-hackers by date:

Previous
From: Tomas Vondra
Date:
Subject: Re: GIN data corruption bug(s) in 9.6devel
Next
From: Simon Riggs
Date:
Subject: Re: Performance degradation in commit 6150a1b0