]> git.ipfire.org Git - thirdparty/postgresql.git/commit
In postgres_fdw, don't try to ship MULTIEXPR updates to remote server.
authorTom Lane <tgl@sss.pgh.pa.us>
Sun, 26 Jan 2020 19:31:08 +0000 (14:31 -0500)
committerTom Lane <tgl@sss.pgh.pa.us>
Sun, 26 Jan 2020 19:31:08 +0000 (14:31 -0500)
commit603e03b4c9e8f853ab15da45e6e72df718ec335c
tree4f96198b6cf53f2582f4163b1eda331529373fcf
parentb9a9cb1bfd6eb6a5526f2a6b21b5865dac46bd8b
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
contrib/postgres_fdw/deparse.c
contrib/postgres_fdw/expected/postgres_fdw.out
contrib/postgres_fdw/sql/postgres_fdw.sql