Re: BUG #18467: postgres_fdw (deparser) ignores LimitOption
Tom Lane <tgl@sss.pgh.pa.us>
From: Tom Lane <tgl@sss.pgh.pa.us>
To: Alvaro Herrera <alvherre@alvh.no-ip.org>
Cc: Japin Li <japinli@hotmail.com>, Etsuro Fujita <etsuro.fujita@gmail.com>,
onderkalaci@gmail.com, pgsql-bugs@lists.postgresql.org
Date: 2024-05-16T16:58:29Z
Lists: pgsql-bugs
Alvaro Herrera <alvherre@alvh.no-ip.org> writes:
> On 2024-May-16, Japin Li wrote:
>> I find that the FETCH FIRST ... ROWS WITH TIES does not support type casting.
> Why do you need this? The standard says
> <fetch first clause> ::= FETCH { FIRST | NEXT } [ <fetch first quantity> ] { ROW | ROWS } { ONLY | WITH TIES }
> <fetch first quantity> ::= <fetch first row count> | <fetch first percentage>
> <offset row count> ::= <simple value specification>
> <fetch first row count> ::= <simple value specification>
> which doesn't seem to leave room for a cast.
Exactly. "LIMIT 42::int8" is accepted, but the equivalent
with FETCH is not, so that there's a hazard of the remote
rejecting the query depending on how deparseExpr chooses
to print the limit expression. Ordinarily it hasn't the
slightest hesitation about affixing casts to constants,
so I suspect there's a live problem there.
I think that this approach to a fix might be the wrong thing
altogether, and that it might be better to refuse to send WITH_TIES
clauses to the remote at all. There are two things that are scaring
me about that:
1. The remote might have a different idea of equality than we do,
leading to different results. Admittedly that's a little bit
far-fetched, but with things like nondeterministic collations floating
around, it's by no means impossible.
2. If the remote is older than v13 the query will fail entirely
for lack of support for WITH TIES.
At the very least we need a remote-version check before deciding
that it'll be OK to ship such a clause. But if there are other
gotchas, as it seems there are, let's just cut our losses and
not do it.
regards, tom lane
Commits
-
postgres_fdw: Refuse to send FETCH FIRST WITH TIES to remote servers.
- 2b461efc5195 13.16 landed
- 269e2c391628 14.13 landed
- b33c141cc52b 15.8 landed
- 8405d5a37a25 16.4 landed
- 8cfbac1492bd 17.0 landed
-
Revert temporal primary keys and foreign keys
- 8aee330af55d 17.0 cited