pg.ddx.io  pgsql-hackers@postgresql.org mailing list archive  
help / color / mirror / Atom feed
From: Antonin Houska <ah@cybertec.at>
To: Etsuro Fujita <fujita.etsuro@lab.ntt.co.jp>
Cc: Tom Lane <tgl@sss.pgh.pa.us>
Cc: Andrew Gierth <andrew@tao11.riddles.org.uk>
Cc: pgsql-hackers@postgresql.org
Subject: Re: Problems with plan estimates in postgres_fdw
Date: Fri, 01 Mar 2019 12:16:58 +0100
Message-ID: <7520.1551439018@localhost> (raw)
In-Reply-To: <5C73B7FB.2010309@lab.ntt.co.jp>
References: <87pnz1aby9.fsf@news-spur.riddles.org.uk>
	<1175.1533220908@sss.pgh.pa.us>
	<5BB739CD.6040002@lab.ntt.co.jp>
	<5BBC4140.50403@lab.ntt.co.jp>
	<5C17A00E.5000005@lab.ntt.co.jp>
	<5C232F39.9060509@lab.ntt.co.jp>
	<5C25C7B5.2010802@lab.ntt.co.jp>
	<5C518631.5080401@lab.ntt.co.jp>
	<10994.1549559088@localhost>
	<5C5D778F.3080501@lab.ntt.co.jp>
	<5C6D474F.5010703@lab.ntt.co.jp>
	<30939.1550848901@localhost>
	<5C73B7FB.2010309@lab.ntt.co.jp>

Etsuro Fujita <fujita.etsuro@lab.ntt.co.jp> wrote:

> (2019/02/23 0:21), Antonin Houska wrote:
> > Etsuro Fujita<fujita.etsuro@lab.ntt.co.jp>  wrote:
> 
> >>> (2019/02/08 2:04), Antonin Houska wrote:
> >>>> * regression tests: I think test(s) should be added for queries that have
> >>>> ORDER BY clause but do not have GROUP BY (and also no LIMIT / OFFSET)
> >>>> clause. I haven't noticed such tests.
> 
> >> I noticed that such queries would be processed by what we already have for
> >> sort pushdown (ie, add_paths_with_pathkeys_for_rel()).  I might be missing
> >> something, though.
> >
> > What about an ORDER BY expression that contains multiple Var nodes? For
> > example
> >
> > SELECT * FROM foo ORDER BY x + y;
> >
> > I think the base relation should not be able to generate paths with the
> > corresponding pathkeys, since its target should (besides PlaceHolderVars,
> > which should not appear in the plan of this simple query at all) only emit
> > individual Vars.
> 
> Actually, add_paths_with_pathkeys_for_rel() generates such pre-sorted paths
> for the base relation, as shown in the below example using HEAD without the
> patchset proposed in this thread:
> 
> postgres=# explain verbose select a+b from ft1 order by a+b;
>                                 QUERY PLAN
> --------------------------------------------------------------------------
>  Foreign Scan on public.ft1  (cost=100.00..200.32 rows=2560 width=4)
>    Output: (a + b)
>    Remote SQL: SELECT a, b FROM public.t1 ORDER BY (a + b) ASC NULLS LAST
> (3 rows)
> 
> I think it is OK for that function to generate such paths, as tlists for such
> paths would be adjusted in apply_scanjoin_target_to_paths(), by doing
> create_projection_path() to them.

I've just checked it. The FDW constructs the (a + b) expression for the ORDER
BY clause on its own. It only needs to find the input vars in the relation
target.

> Conversely, it appears that add_foreign_ordered_paths() added by the patchset
> would generate such pre-sorted paths *redundantly* when the input_rel is the
> final scan/join relation.  Will look into that.

Currently I have no idea how to check the plan created by FDW at the
UPPERREL_ORDERED stage, except for removing the sort from the
UPPERREL_GROUP_AGG stage as I proposed here:

https://www.postgresql.org/message-id/11807.1549564431%40localhost

-- 
Antonin Houska
https://www.cybertec-postgresql.com




view thread (48+ messages)  latest in thread

Message-ID: <7520.1551439018@localhost>
Permalink:  ../7520.1551439018@localhost/
Also on:    postgresql.org/message-id/7520.1551439018@localhost

 · 

reply

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Reply to all the recipients using the --to and --cc options:
  reply via email

  To: pgsql-hackers@postgresql.org
  Cc: ah@cybertec.at, fujita.etsuro@lab.ntt.co.jp, tgl@sss.pgh.pa.us, andrew@tao11.riddles.org.uk
  Subject: Re: Problems with plan estimates in postgres_fdw
  In-Reply-To: <7520.1551439018@localhost>

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

This inbox is served by DDX for PostgreSQL; see mirroring instructions
for how to clone and mirror all data and code used for this inbox