On Wed, Dec 16, 2015 at 11:41 PM, Tom Lane <t...@sss.pgh.pa.us> wrote:

> Robert Haas <robertmh...@gmail.com> writes:
> > I like option #2.  I don't really have a strong reason for that, but
> > it feels intuitive to me that we err on the side of using remote
> > estimates when in doubt.
>
> If we believe that, why isn't the default value of use_remote_estimate
> true?
> (Maybe it should be.)
>
> Another option that should be considered is that joins should pay
> attention only to the server-level setting and not to the individual
> tables' settings.  This would surely be cheaper to implement, and
> it avoids any questions about whether to OR or AND the individual
> settings.
>
>
To implement server-level setting, we will need to pull it out of
ForeignServer structure like
 442     foreach(lc, fpinfo->server->options)
 443     {
 444         DefElem    *def = (DefElem *) lfirst(lc);
 445
 446         if (strcmp(def->defname, "use_remote_estimate") == 0)
 447             fpinfo->use_remote_estimate = defGetBoolean(def);
 ...
 455     }

whereas use_remote_estimate setting for joining relations is readily
available in PgFdwRelationInfo

 58     /* Options extracted from catalogs. */
 59     bool        use_remote_estimate;
 60     Cost        fdw_startup_cost;
 61     Cost        fdw_tuple_cost;
 62     List       *shippable_extensions;   /* OIDs of whitelisted
extensions */
 ...
 76 } ;

This use_remote_estimate is true if server level option is true or table
level option is true.

ANDing or ORing use_remote_estimate from the joining relations'
PgFdwRelationInfo looks cheaper than pulling it out of ForeignServer
structure.

-- 
Best Wishes,
Ashutosh Bapat
EnterpriseDB Corporation
The Postgres Database Company

Reply via email to