Re: Missed LIMIT clause pushdown in FDW API

From: Merlin Moncure <mmoncure(at)gmail(dot)com>
To: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
Cc: Alexander Reshetov <alexander(dot)v(dot)reshetov(at)gmail(dot)com>, PostgreSQL General <pgsql-general(at)postgresql(dot)org>
Subject: Re: Missed LIMIT clause pushdown in FDW API
Date: 2016-03-30 14:19:11
Message-ID: CAHyXU0wgSU35=LrwGCxKGYqc5a_VXUuXOQCC0CZw=PVdAzb5_Q@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general

On Wed, Mar 30, 2016 at 8:33 AM, Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us> wrote:
> Merlin Moncure <mmoncure(at)gmail(dot)com> writes:
>> On Wed, Mar 30, 2016 at 3:52 AM, Alexander Reshetov
>> <alexander(dot)v(dot)reshetov(at)gmail(dot)com> wrote:
>>> As far as I know there is no LIMIT clause pushdown in FDW API.
>>> Is there some reasons not to support LIMIT clause pushdown?
>
> It was impossible to do it before 3fc6e2d7f5b652b4, committed 3 weeks
> ago. Now that that infrastructure exists, someone might look into
> using it for this purpose ... but not before 9.7 at the earliest.
>
>> Working for me on 9.5 with postgres_fdw...
>
> Really? It's true that postgres_fdw won't fetch more rows than it
> actually needs from the remote --- but that's not the same as telling
> the remote planner to prefer a fast-start plan.

I guess was underthinking it. A quick test showed:

castaging=# explain analyze select count(*) from tblapt;
QUERY PLAN
───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
Aggregate (cost=220.92..220.93 rows=1 width=0) (actual
time=753.287..753.287 rows=1 loops=1)
-> Foreign Scan on tblapt (cost=100.00..212.39 rows=3413 width=0)
(actual time=1.753..748.887 rows=64284 loops=1)
Planning time: 0.063 ms
Execution time: 754.636 ms
(4 rows)

Time: 756.746 ms
castaging=# explain analyze select * from tblapt limit 1;
QUERY PLAN
────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
Limit (cost=100.00..100.26 rows=1 width=1839) (actual
time=15.504..15.504 rows=1 loops=1)
-> Foreign Scan on tblapt (cost=100.00..111.29 rows=43
width=1839) (actual time=15.503..15.503 rows=1 loops=1)
Planning time: 0.131 ms
Execution time: 16.615 ms
(4 rows)

Time: 18.619 ms

However, tailing the query log on the remote server, I see that it is
using DECLARE/FETCH and aborting in the limit case. So I was tricked
-- this isn't LIMIT pushdown.

merlin

In response to

Browse pgsql-general by date

  From Date Subject
Next Message Pavlov, Vladimir 2016-03-30 15:03:31 Re: Multixacts wraparound monitoring
Previous Message Tom Lane 2016-03-30 14:01:35 Re: pg_restore casts check constraints differently