Thread
Commits
-
Reset API of clause_selectivity()
- ac2b09508834 10.0 landed
-
Collect and use multi-column dependency stats
- 2686ee1b7ccf 10.0 cited
-
Implement multivariate n-distinct coefficients
- 7b504eb282ca 10.0 cited
-
pgsql: Collect and use multi-column dependency stats
Simon Riggs <simon@2ndquadrant.com> — 2017-04-05T22:06:02Z
Collect and use multi-column dependency stats Follow on patch in the multi-variate statistics patch series. CREATE STATISTICS s1 WITH (dependencies) ON (a, b) FROM t; ANALYZE; will collect dependency stats on (a, b) and then use the measured dependency in subsequent query planning. Commit 7b504eb282ca2f5104b5c00b4f05a3ef6bb1385b added CREATE STATISTICS with n-distinct coefficients. These are now specified using the mutually exclusive option WITH (ndistinct). Author: Tomas Vondra, David Rowley Reviewed-by: Kyotaro HORIGUCHI, Álvaro Herrera, Dean Rasheed, Robert Haas and many other comments and contributions Discussion: https://postgr.es/m/56f40b20-c464-fad2-ff39-06b668fac47c@2ndquadrant.com Branch ------ master Details ------- http://git.postgresql.org/pg/commitdiff/2686ee1b7ccfb9214064d4d2a98ea77382880306 Modified Files -------------- contrib/file_fdw/file_fdw.c | 1 + contrib/postgres_fdw/postgres_fdw.c | 5 +- doc/src/sgml/catalogs.sgml | 9 + doc/src/sgml/planstats.sgml | 154 +++ doc/src/sgml/ref/create_statistics.sgml | 42 +- src/backend/catalog/system_views.sql | 3 +- src/backend/commands/statscmds.c | 17 +- src/backend/optimizer/path/clausesel.c | 113 ++- src/backend/optimizer/path/costsize.c | 25 +- src/backend/optimizer/util/orclauses.c | 4 +- src/backend/optimizer/util/plancat.c | 12 + src/backend/statistics/Makefile | 2 +- src/backend/statistics/README | 68 +- src/backend/statistics/README.dependencies | 119 +++ src/backend/statistics/dependencies.c | 1079 ++++++++++++++++++++++ src/backend/statistics/extended_stats.c | 105 ++- src/backend/utils/adt/ruleutils.c | 54 +- src/backend/utils/adt/selfuncs.c | 20 +- src/bin/psql/describe.c | 12 +- src/include/catalog/pg_cast.h | 4 + src/include/catalog/pg_proc.h | 9 + src/include/catalog/pg_statistic_ext.h | 7 +- src/include/catalog/pg_type.h | 4 + src/include/optimizer/cost.h | 6 +- src/include/statistics/extended_stats_internal.h | 5 + src/include/statistics/statistics.h | 44 + src/test/regress/expected/opr_sanity.out | 3 +- src/test/regress/expected/rules.out | 3 +- src/test/regress/expected/stats_ext.out | 110 ++- src/test/regress/expected/type_sanity.out | 7 +- src/test/regress/sql/stats_ext.sql | 68 ++ 31 files changed, 2035 insertions(+), 79 deletions(-)
-
Re: [COMMITTERS] pgsql: Collect and use multi-column dependency stats
Tom Lane <tgl@sss.pgh.pa.us> — 2017-04-05T22:48:57Z
Simon Riggs <simon@2ndQuadrant.com> writes: > Collect and use multi-column dependency stats The buildfarm is unhappy about the fact that this changed the API for clauselist_selectivity(). I am not convinced that that change was a good idea, so before telling FDW authors that they need to change their code, I'd like to hear a defense of the API change. Why not just use the existing varRelid parameter for that? Why is there an assumption that only one rel's extended stats will ever be of interest? This function does get used for join clauses. regards, tom lane
-
Re: [COMMITTERS] pgsql: Collect and use multi-column dependency stats
David Rowley <david.rowley@2ndquadrant.com> — 2017-04-05T23:20:36Z
On 6 April 2017 at 10:48, Tom Lane <tgl@sss.pgh.pa.us> wrote: > Simon Riggs <simon@2ndQuadrant.com> writes: >> Collect and use multi-column dependency stats > > The buildfarm is unhappy about the fact that this changed the API > for clauselist_selectivity(). I am not convinced that that change > was a good idea, so before telling FDW authors that they need to > change their code, I'd like to hear a defense of the API change. > Why not just use the existing varRelid parameter for that? Why > is there an assumption that only one rel's extended stats will > ever be of interest? This function does get used for join clauses. Because varReliId is often passed in as 0, and that meant we'd have to write some code to check of the clause was made up of RestrictInfos from a single relation or not, and look for extended stats on that singleton rel. Given the number of times this function gets called during planning, especially so with queries involving many joins, I think it's best to not have to extract the correct relids each time. I coded it that way to reduce the overhead during planning, which is something that often comes up with planner patches. FWIW, I found this function being called 72 times in a 5 way join search problem. Perhaps there is a nicer way to do this, I just couldn't think of it. -- David Rowley http://www.2ndQuadrant.com/ PostgreSQL Development, 24x7 Support, Training & Services
-
Re: [COMMITTERS] pgsql: Collect and use multi-column dependency stats
Tom Lane <tgl@sss.pgh.pa.us> — 2017-04-05T23:33:03Z
David Rowley <david.rowley@2ndquadrant.com> writes: > On 6 April 2017 at 10:48, Tom Lane <tgl@sss.pgh.pa.us> wrote: >> The buildfarm is unhappy about the fact that this changed the API >> for clauselist_selectivity(). I am not convinced that that change >> was a good idea, so before telling FDW authors that they need to >> change their code, I'd like to hear a defense of the API change. > Because varReliId is often passed in as 0, and that meant we'd have to > write some code to check of the clause was made up of RestrictInfos > from a single relation or not, and look for extended stats on that > singleton rel. Generally, if it's passed as zero, that's a good clue that the clause *is* a join clause. In any case, this defense fails to address my other question, which is what's going to happen to this API when you want to use extended stats in join-clause estimates, which I'd expect to surely happen before very long. Also, I find it hard to believe that a bms_get_singleton_member call is going to be material in comparison to all the work that will be invoked indirectly via whatever selectivity estimation function gets called for each clause. Even a single catcache fetch would swamp that. So no, you have not convinced me that this isn't a broken design. > FWIW, I found this function being called 72 times in a 5 way join > search problem. And you measured the overhead of doing it the other way to be ... ? Premature optimization and all that. regards, tom lane
-
Re: [COMMITTERS] pgsql: Collect and use multi-column dependency stats
David Rowley <david.rowley@2ndquadrant.com> — 2017-04-06T01:05:24Z
On 6 April 2017 at 11:33, Tom Lane <tgl@sss.pgh.pa.us> wrote: > David Rowley <david.rowley@2ndquadrant.com> writes: >> On 6 April 2017 at 10:48, Tom Lane <tgl@sss.pgh.pa.us> wrote: >>> The buildfarm is unhappy about the fact that this changed the API >>> for clauselist_selectivity(). I am not convinced that that change >>> was a good idea, so before telling FDW authors that they need to >>> change their code, I'd like to hear a defense of the API change. > >> Because varReliId is often passed in as 0, and that meant we'd have to >> write some code to check of the clause was made up of RestrictInfos >> from a single relation or not, and look for extended stats on that >> singleton rel. > > Generally, if it's passed as zero, that's a good clue that the clause > *is* a join clause. In any case, this defense fails to address my > other question, which is what's going to happen to this API when you > want to use extended stats in join-clause estimates, which I'd expect > to surely happen before very long. > > Also, I find it hard to believe that a bms_get_singleton_member call is > going to be material in comparison to all the work that will be invoked > indirectly via whatever selectivity estimation function gets called for > each clause. Even a single catcache fetch would swamp that. > > So no, you have not convinced me that this isn't a broken design. > >> FWIW, I found this function being called 72 times in a 5 way join >> search problem. > > And you measured the overhead of doing it the other way to be ... ? > Premature optimization and all that. I tested with the attached, and it does not seem to hurt planner performance executing: explain select * from ab ab1 inner join ab ab2 on ab1.a = ab2.a and ab1.b = ab2.b inner join ab ab3 on ab1.a = ab3.a and ab1.b = ab3.b inner join ab ab4 on ab1.a = ab4.a and ab1.b = ab4.b inner join ab ab5 on ab1.a = ab5.a and ab1.b = ab5.b inner join ab ab6 on ab1.a = ab6.a and ab1.b = ab6.b inner join ab ab7 on ab1.a = ab7.a and ab1.b = ab7.b inner join ab ab8 on ab1.a = ab8.a and ab1.b = ab8.b; after having executed: create table ab (a int, b int); I get: find_relation_from_clauses tps = 48.992918 (excluding connections establishing) tps = 49.060407 (excluding connections establishing) tps = 49.075815 (excluding connections establishing) Master tps = 48.938027 (excluding connections establishing) tps = 48.066274 (excluding connections establishing) tps = 48.727089 (excluding connections establishing) running pgbench -n -T 60 -f 8wayjoin.sql -- David Rowley http://www.2ndQuadrant.com/ PostgreSQL Development, 24x7 Support, Training & Services
-
Re: [COMMITTERS] pgsql: Collect and use multi-column dependency stats
David Rowley <david.rowley@2ndquadrant.com> — 2017-04-06T01:10:48Z
On 6 April 2017 at 13:05, David Rowley <david.rowley@2ndquadrant.com> wrote: > I tested with the attached, and it does not seem to hurt planner > performance executing: Here's it again, this time with a comment on the find_relation_from_clauses() function. -- David Rowley http://www.2ndQuadrant.com/ PostgreSQL Development, 24x7 Support, Training & Services
-
Re: [COMMITTERS] pgsql: Collect and use multi-column dependency stats
Kyotaro HORIGUCHI <horiguchi.kyotaro@lab.ntt.co.jp> — 2017-04-06T06:03:16Z
At Thu, 6 Apr 2017 13:10:48 +1200, David Rowley <david.rowley@2ndquadrant.com> wrote in <CAKJS1f8Um=BvRmgcb3u6ze1q1xL7A1VKTVF9s2R1_UfRqx8q5w@mail.gmail.com> > On 6 April 2017 at 13:05, David Rowley <david.rowley@2ndquadrant.com> wrote: > > I tested with the attached, and it does not seem to hurt planner > > performance executing: > > Here's it again, this time with a comment on the > find_relation_from_clauses() function. It seems to work as the same as the previous version with additional cost to scan over restrict clauses. But separate loop over clauses is additional overhead in any cases even irrelavant to functional dependency. The more columns are in the relation, the longer time bms_get_singleton_member takes. Although I'm not sure how much it hurts performance and I can't think of a good alternative right now, I think that the overhead should be avoided anyhow. At Thu, 6 Apr 2017 13:05:24 +1200, David Rowley <david.rowley@2ndquadrant.com> wrote in <CAKJS1f_gB=gyZn8wMw0v8uCKD1nYeWyNYCXKz=+Oo0yR4RRyiA@mail.gmail.com> > > And you measured the overhead of doing it the other way to be ... ? > > Premature optimization and all that. > > I tested with the attached, and it does not seem to hurt planner > performance executing: Here, bms_singleton_member takes longer time if the relation has many columns and there's a functional dependency covering the columns at the very tail. Maybe only two are not practical for testing. Even if it doesn't impact performance detectably, if only one attribute is needed, an AttrNumber member in context will be sufficient. No bitmap operation seems required in dependency_compatible_walker and it can bail out by the second attribute. regards, -- Kyotaro Horiguchi NTT Open Source Software Center
-
Re: [COMMITTERS] pgsql: Collect and use multi-column dependency stats
David Rowley <david.rowley@2ndquadrant.com> — 2017-04-06T06:59:35Z
On 6 April 2017 at 18:03, Kyotaro HORIGUCHI <horiguchi.kyotaro@lab.ntt.co.jp> wrote: > At Thu, 6 Apr 2017 13:10:48 +1200, David Rowley <david.rowley@2ndquadrant.com> wrote in <CAKJS1f8Um=BvRmgcb3u6ze1q1xL7A1VKTVF9s2R1_UfRqx8q5w@mail.gmail.com> >> On 6 April 2017 at 13:05, David Rowley <david.rowley@2ndquadrant.com> wrote: >> > I tested with the attached, and it does not seem to hurt planner >> > performance executing: >> >> Here's it again, this time with a comment on the >> find_relation_from_clauses() function. > > It seems to work as the same as the previous version with > additional cost to scan over restrict clauses. But separate loop > over clauses is additional overhead in any cases even irrelavant > to functional dependency. The more columns are in the relation, > the longer time bms_get_singleton_member takes. Although I'm not > sure how much it hurts performance and I can't think of a good > alternative right now, I think that the overhead should be > avoided anyhow. I'm not all that sure why the number of columns in the relation has relevance to the performance of find_relation_from_clauses(). The bms_get_singleton_member() is checking which relations are part of the RestrictInfo, nothing related to columns in relations. Perhaps you meant clauses in the clauses list? Which does not really have all that much to do with the number of columns in the relation either. > > At Thu, 6 Apr 2017 13:05:24 +1200, David Rowley <david.rowley@2ndquadrant.com> wrote in <CAKJS1f_gB=gyZn8wMw0v8uCKD1nYeWyNYCXKz=+Oo0yR4RRyiA@mail.gmail.com> >> > And you measured the overhead of doing it the other way to be ... ? >> > Premature optimization and all that. >> >> I tested with the attached, and it does not seem to hurt planner >> performance executing: > > Here, bms_singleton_member takes longer time if the relation has > many columns and there's a functional dependency covering the > columns at the very tail. Maybe only two are not practical for > testing. Can you explain why you think this? And confirm you're speaking about the bms_get_singleton() member in find_relation_from_clauses() > Even if it doesn't impact performance detectably, if only one > attribute is needed, an AttrNumber member in context will be > sufficient. No bitmap operation seems required in > dependency_compatible_walker and it can bail out by the second > attribute. Are you looking at an old patch? That function no longer exists. -- David Rowley http://www.2ndQuadrant.com/ PostgreSQL Development, 24x7 Support, Training & Services
-
Re: [COMMITTERS] pgsql: Collect and use multi-column dependency stats
Kyotaro HORIGUCHI <horiguchi.kyotaro@lab.ntt.co.jp> — 2017-04-06T07:50:56Z
At Thu, 6 Apr 2017 18:59:35 +1200, David Rowley <david.rowley@2ndquadrant.com> wrote in <CAKJS1f-yrLizV5N_-r1o4vemuZBTJd8EzwPyx2QG=F6891++=g@mail.gmail.com> > On 6 April 2017 at 18:03, Kyotaro HORIGUCHI > <horiguchi.kyotaro@lab.ntt.co.jp> wrote: > > At Thu, 6 Apr 2017 13:10:48 +1200, David Rowley <david.rowley@2ndquadrant.com> wrote in <CAKJS1f8Um=BvRmgcb3u6ze1q1xL7A1VKTVF9s2R1_UfRqx8q5w@mail.gmail.com> > >> On 6 April 2017 at 13:05, David Rowley <david.rowley@2ndquadrant.com> wrote: > I'm not all that sure why the number of columns in the relation has > relevance to the performance of find_relation_from_clauses(). The > bms_get_singleton_member() is checking which relations are part of the > RestrictInfo, nothing related to columns in relations. > Perhaps you meant clauses in the clauses list? Which does not really > have all that much to do with the number of columns in the relation > either. Sorry, it's number of relations, not columns. I'm not sure up to how many relations we practically should consider but anyway it is extra burden to every call to clauselist_selectivity. We should avoid calling find_relation_from_clauses as far as possible or do the same in more simple way. However I'm not sure more precise exclusion is possible or not, I thinks that the case of jointype != JOIN_INNER can be exluded. > > At Thu, 6 Apr 2017 13:05:24 +1200, David Rowley <david.rowley@2ndquadrant.com> wrote in <CAKJS1f_gB=gyZn8wMw0v8uCKD1nYeWyNYCXKz=+Oo0yR4RRyiA@mail.gmail.com> > >> > And you measured the overhead of doing it the other way to be ... ? > >> > Premature optimization and all that. > >> > >> I tested with the attached, and it does not seem to hurt planner > >> performance executing: > > > > Here, bms_singleton_member takes longer time if the relation has > > many columns and there's a functional dependency covering the > > columns at the very tail. Maybe only two are not practical for > > testing. > > Can you explain why you think this? And confirm you're speaking about > the bms_get_singleton() member in find_relation_from_clauses() I mentioned dependency_is_compatible_clause here, but I saw that it has been simplified enough in the committed shape. > > Even if it doesn't impact performance detectably, if only one > > attribute is needed, an AttrNumber member in context will be > > sufficient. No bitmap operation seems required in > > dependency_compatible_walker and it can bail out by the second > > attribute. > > Are you looking at an old patch? That function no longer exists. Yes! Sorry for the noise. regards, -- Kyotaro Horiguchi NTT Open Source Software Center
-
Re: [COMMITTERS] pgsql: Collect and use multi-column dependency stats
David Rowley <david.rowley@2ndquadrant.com> — 2017-04-06T09:55:43Z
On 6 April 2017 at 19:50, Kyotaro HORIGUCHI <horiguchi.kyotaro@lab.ntt.co.jp> wrote: > At Thu, 6 Apr 2017 18:59:35 +1200, David Rowley <david.rowley@2ndquadrant.com> wrote in <CAKJS1f-yrLizV5N_-r1o4vemuZBTJd8EzwPyx2QG=F6891++=g@mail.gmail.com> >> On 6 April 2017 at 18:03, Kyotaro HORIGUCHI >> <horiguchi.kyotaro@lab.ntt.co.jp> wrote: >> > At Thu, 6 Apr 2017 13:10:48 +1200, David Rowley <david.rowley@2ndquadrant.com> wrote in <CAKJS1f8Um=BvRmgcb3u6ze1q1xL7A1VKTVF9s2R1_UfRqx8q5w@mail.gmail.com> >> >> On 6 April 2017 at 13:05, David Rowley <david.rowley@2ndquadrant.com> wrote: >> I'm not all that sure why the number of columns in the relation has >> relevance to the performance of find_relation_from_clauses(). The >> bms_get_singleton_member() is checking which relations are part of the >> RestrictInfo, nothing related to columns in relations. >> Perhaps you meant clauses in the clauses list? Which does not really >> have all that much to do with the number of columns in the relation >> either. > > Sorry, it's number of relations, not columns. I'm not sure up to > how many relations we practically should consider but anyway it > is extra burden to every call to clauselist_selectivity. We > should avoid calling find_relation_from_clauses as far as > possible or do the same in more simple way. However I'm not sure > more precise exclusion is possible or not, I thinks that the case > of jointype != JOIN_INNER can be exluded. Well, I imagine queries with >= 32 relations are not planning very quickly as of today already. I understand what you mean when you speak of attributes, as we could constantly be looking for the 1400's attribute which is many loops into a bms_get_singleton_member() call. I can't imagine we'll even flow over the first word in a bitmap set in 99% of cases with clause_relids. In any case, even if there's a giant chain of clauses in the the 'clauses' list, we'll bail out on the first join qual anyway, since it won't be a singleton clause_relid. I'd say if you can come up with a test case where you can measure the impact of this, then let's discuss more. Otherwise we're stepping back into the territory that Tom warned me about a few emails up.... Premature Optimisation. I'm not walking down there again, I only just got back. -- David Rowley http://www.2ndQuadrant.com/ PostgreSQL Development, 24x7 Support, Training & Services
-
Re: [COMMITTERS] pgsql: Collect and use multi-column dependency stats
Kyotaro HORIGUCHI <horiguchi.kyotaro@lab.ntt.co.jp> — 2017-04-06T10:42:24Z
At Thu, 6 Apr 2017 21:55:43 +1200, David Rowley <david.rowley@2ndquadrant.com> wrote in <CAKJS1f95tOuSEMfmYWBPj-fGw=SY0MYDbQh5BiRiTtonMpws7Q@mail.gmail.com> > On 6 April 2017 at 19:50, Kyotaro HORIGUCHI > <horiguchi.kyotaro@lab.ntt.co.jp> wrote: > > At Thu, 6 Apr 2017 18:59:35 +1200, David Rowley <david.rowley@2ndquadrant.com> wrote in <CAKJS1f-yrLizV5N_-r1o4vemuZBTJd8EzwPyx2QG=F6891++=g@mail.gmail.com> > >> On 6 April 2017 at 18:03, Kyotaro HORIGUCHI > >> <horiguchi.kyotaro@lab.ntt.co.jp> wrote: > >> > At Thu, 6 Apr 2017 13:10:48 +1200, David Rowley <david.rowley@2ndquadrant.com> wrote in <CAKJS1f8Um=BvRmgcb3u6ze1q1xL7A1VKTVF9s2R1_UfRqx8q5w@mail.gmail.com> > >> >> On 6 April 2017 at 13:05, David Rowley <david.rowley@2ndquadrant.com> wrote: > >> I'm not all that sure why the number of columns in the relation has > >> relevance to the performance of find_relation_from_clauses(). The > >> bms_get_singleton_member() is checking which relations are part of the > >> RestrictInfo, nothing related to columns in relations. > >> Perhaps you meant clauses in the clauses list? Which does not really > >> have all that much to do with the number of columns in the relation > >> either. > > > > Sorry, it's number of relations, not columns. I'm not sure up to > > how many relations we practically should consider but anyway it > > is extra burden to every call to clauselist_selectivity. We > > should avoid calling find_relation_from_clauses as far as > > possible or do the same in more simple way. However I'm not sure > > more precise exclusion is possible or not, I thinks that the case > > of jointype != JOIN_INNER can be exluded. > > Well, I imagine queries with >= 32 relations are not planning very > quickly as of today already. I understand what you mean when you speak > of attributes, as we could constantly be looking for the 1400's > attribute which is many loops into a bms_get_singleton_member() call. > I can't imagine we'll even flow over the first word in a bitmap set in > 99% of cases with clause_relids. In any case, even if there's a giant > chain of clauses in the the 'clauses' list, we'll bail out on the > first join qual anyway, since it won't be a singleton clause_relid. Yes, I agree that most cases doesn't suffer this. Anyway since I don't have enough knowlege required to roughly estimate the impact nor concrete expample where the planning time increases significantly, I don't assert any more on this point. > I'd say if you can come up with a test case where you can measure the > impact of this, then let's discuss more. Otherwise we're stepping back > into the territory that Tom warned me about a few emails up.... > Premature Optimisation. I'm not walking down there again, I only just > got back. regards, -- Kyotaro Horiguchi NTT Open Source Software Center
-
Re: [COMMITTERS] pgsql: Collect and use multi-column dependency stats
Simon Riggs <simon@2ndquadrant.com> — 2017-04-06T12:47:50Z
On 5 April 2017 at 18:48, Tom Lane <tgl@sss.pgh.pa.us> wrote: > Simon Riggs <simon@2ndQuadrant.com> writes: >> Collect and use multi-column dependency stats > > The buildfarm is unhappy about the fact that this changed the API > for clauselist_selectivity(). I am not convinced that that change > was a good idea, so before telling FDW authors that they need to > change their code, I'd like to hear a defense of the API change. > Why not just use the existing varRelid parameter for that? Why > is there an assumption that only one rel's extended stats will > ever be of interest? This function does get used for join clauses. Point noted. Reading thread and hope to fix today. -- Simon Riggs http://www.2ndQuadrant.com/ PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services
-
Re: [COMMITTERS] pgsql: Collect and use multi-column dependency stats
David Rowley <david.rowley@2ndquadrant.com> — 2017-04-06T21:41:24Z
On 7 April 2017 at 00:47, Simon Riggs <simon@2ndquadrant.com> wrote: > On 5 April 2017 at 18:48, Tom Lane <tgl@sss.pgh.pa.us> wrote: >> Simon Riggs <simon@2ndQuadrant.com> writes: >>> Collect and use multi-column dependency stats >> >> The buildfarm is unhappy about the fact that this changed the API >> for clauselist_selectivity(). I am not convinced that that change >> was a good idea, so before telling FDW authors that they need to >> change their code, I'd like to hear a defense of the API change. >> Why not just use the existing varRelid parameter for that? Why >> is there an assumption that only one rel's extended stats will >> ever be of interest? This function does get used for join clauses. > > Point noted. Reading thread and hope to fix today. I've attached a rebased patch which fixes up the conflict with the BRIN cost estimate patch which went in a short while ago. -- David Rowley http://www.2ndQuadrant.com/ PostgreSQL Development, 24x7 Support, Training & Services
-
Re: [COMMITTERS] pgsql: Collect and use multi-column dependency stats
Simon Riggs <simon@2ndquadrant.com> — 2017-04-06T23:14:22Z
On 6 April 2017 at 17:41, David Rowley <david.rowley@2ndquadrant.com> wrote: > On 7 April 2017 at 00:47, Simon Riggs <simon@2ndquadrant.com> wrote: >> On 5 April 2017 at 18:48, Tom Lane <tgl@sss.pgh.pa.us> wrote: >>> Simon Riggs <simon@2ndQuadrant.com> writes: >>>> Collect and use multi-column dependency stats >>> >>> The buildfarm is unhappy about the fact that this changed the API >>> for clauselist_selectivity(). I am not convinced that that change >>> was a good idea, so before telling FDW authors that they need to >>> change their code, I'd like to hear a defense of the API change. >>> Why not just use the existing varRelid parameter for that? Why >>> is there an assumption that only one rel's extended stats will >>> ever be of interest? This function does get used for join clauses. >> >> Point noted. Reading thread and hope to fix today. > > I've attached a rebased patch which fixes up the conflict with the > BRIN cost estimate patch which went in a short while ago. Looks enough to me, for now at least. Minor comment added. -- Simon Riggs http://www.2ndQuadrant.com/ PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services