(2019/02/23 0:21), Antonin Houska wrote:
Etsuro Fujita<fujita.ets...@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.

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.

Best regards,
Etsuro Fujita


Reply via email to