pgsql: In postgres_fdw, don't try to ship MULTIEXPR updates to remote s

From: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
To: pgsql-committers(at)lists(dot)postgresql(dot)org
Subject: pgsql: In postgres_fdw, don't try to ship MULTIEXPR updates to remote s
Date: 2020-01-26 19:31:30
Message-ID: E1ivnd4-00011N-6R@gemulon.postgresql.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-committers

In postgres_fdw, don't try to ship MULTIEXPR updates to remote server.

In a statement like "UPDATE remote_tab SET (x,y) = (SELECT ...)",
we'd conclude that the statement could be directly executed remotely,
because the sub-SELECT is in a resjunk tlist item that's not examined
for shippability. Currently that ends up crashing if the sub-SELECT
contains any remote Vars. Prevent the crash by deeming MULTIEXEC
Params to be unshippable.

This is a bit of a brute-force solution, since if the sub-SELECT
*doesn't* contain any remote Vars, the current execution technology
would work; but that's not a terribly common use-case for this syntax,
I think. In any case, we generally don't try to ship sub-SELECTs, so
it won't surprise anybody that this doesn't end up as a remote direct
update. I'd be inclined to see if that general limitation can be fixed
before worrying about this case further.

Per report from Lukáš Sobotka.

Back-patch to 9.6. 9.5 had MULTIEXPR, but we didn't try to perform
remote direct updates then, so the case didn't arise anyway.

Discussion: https://postgr.es/m/CAJif3k+iA_ekBB5Zw2hDBaE1wtiQa4LH4_JUXrrMGwTrH0J01Q@mail.gmail.com

Branch
------
REL_12_STABLE

Details
-------
https://git.postgresql.org/pg/commitdiff/7294f99a0b2043cf9b34a9a59ecb3dfbfae94f85

Modified Files
--------------
contrib/postgres_fdw/deparse.c | 16 +++++++++++++
contrib/postgres_fdw/expected/postgres_fdw.out | 31 ++++++++++++++++++++++++++
contrib/postgres_fdw/sql/postgres_fdw.sql | 20 +++++++++++++++++
3 files changed, 67 insertions(+)

Browse pgsql-committers by date

  From Date Subject
Next Message Thomas Munro 2020-01-26 20:16:36 pgsql: Refactor confusing code in _mdfd_openseg().
Previous Message Heikki Linnakangas 2020-01-26 09:39:48 pgsql: Refactor XLogReadRecord(), adding XLogBeginRead() function.