• Tom Lane's avatar
    In postgres_fdw, don't try to ship MULTIEXPR updates to remote server. · 215824f9
    Tom Lane authored
    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
    215824f9
postgres_fdw.sql 110 KB