| From: | Tomas Vondra <tv(at)fuzzy(dot)cz> |
|---|---|
| To: | |
| Cc: | pgsql-hackers <pgsql-hackers(at)postgresql(dot)org> |
| Subject: | Re: FDW / list of needed columns, WHERE conditions (in PlanForeignScan) |
| Date: | 2012-05-29 23:41:21 |
| Message-ID: | 4FC55EA1.8040704@fuzzy.cz |
| Views: | Whole Thread | Raw Message | Download mbox | Resend email |
| Thread: | |
| Lists: | pgsql-hackers |
On 28.5.2012 23:20, Tom Lane wrote:
> Tomas Vondra <tv(at)fuzzy(dot)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
| From | Date | Subject | |
|---|---|---|---|
| Next Message | Jeff Davis | 2012-05-29 23:41:53 | Re: Add primary key/unique constraint using prefix columns of an index |
| Previous Message | Jim Nasby | 2012-05-29 23:36:24 | Re: Fake async rep target |