On 28.5.2012 23:20, Tom Lane wrote: > Tomas Vondra <t...@fuzzy.cz> writes: >> I'm writing my first FDW, and I need to get the list of columns I >> actually need to fetch when planning the query. I do want to fetch only >> the columns that are actually needed, not all of them. > > reltargetlist and attr_needed only tell you about columns the scan has > to *output* (ie, they are used in join conditions or the final result). > Vars that are only mentioned in baserestrict conditions aren't > included. So you'd need to do something like pull_varattnos on the > baserestrictinfo list and union that with attr_needed. > >> Also, I'd like to apply as much restrictions as possible when executing >> the plan. I see there's PlanState->qual, described as "implicitly-ANDed >> qual conditions", which I assume is what I need. But this seems to be >> available only in BeginForeignScan (as ss.ps.qual in ForeignScanState), >> not in planning which is the place where I need to compute estimates >> etc. Where do I get this, when planning the query? > > Same answer, rel->baserestrictinfo. > > regards, tom lane >
Thanks for the explanation, but it leads me to another question ... Do I need to return only the data in rel->reltargetlist, or should I return all the columns (including those in rel->baserestrictinfo)? Because AFAIK PostgreSQL will recheck the conditions on the data returned from FDW and if I only return the attributes from the reltargetlist, the conditions will evaluate to FALSE. Can I prevent the recheck somehow e.g. by deleting it from baserestrictinfo? Also, how is baserestrictinfo related to PlanState.quals? Actually what are 'qual conditions'? I see 'qual' is a list of conditions connected by AND, but I'm not sure what a 'qual' means. Is that equality? kind regards Tomas -- Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-hackers