Re: support for MERGE
Alvaro Herrera <alvherre@alvh.no-ip.org>
From: Alvaro Herrera <alvherre@alvh.no-ip.org>
To: Japin Li <japinli@hotmail.com>
Cc: Erik Rijkers <er@xs4all.nl>, Andrew Dunstan <andrew@dunslane.net>, Simon Riggs <simon.riggs@enterprisedb.com>, Tomas Vondra <tomas.vondra@enterprisedb.com>, Zhihong Yu <zyu@yugabyte.com>, Daniel Westermann <dwe@dbi-services.com>, Amit Langote <amitlangote09@gmail.com>, Justin Pryzby <pryzby@telsasoft.com>, Pavan Deolasee <pavan.deolasee@gmail.com>, pgsql-hackers@lists.postgresql.org
Date: 2022-01-20T21:02:22Z
Lists: pgsql-hackers
On 2022-Jan-17, Japin Li wrote:
> So for NOT MATCHED, we are expected not use the target table columns.
>
> The code comes from execMerge.c says:
>
> /*
> * Make source tuple available to ExecQual and ExecProject. We don't need
> * the target tuple, since the WHEN quals and the targetlist can't refer to
> * the target columns.
> */
> econtext->ecxt_scantuple = NULL;
> econtext->ecxt_innertuple = slot;
> econtext->ecxt_outertuple = NULL;
>
> It will set econtext->ecxt_scantuple to NULL, which leads the crash.
Right. So this was broken by the fact that I recently allowed MATCHED
actions to target DO NOTHING; previously, only NOT MATCHED actions could
do so. So the bug was present, but it wasn't accessible.
> Should we setNamespaceVisibilityForRTE() for CMD_NOTHING? I try to set it
> and it works as expected. OTOH, the system attributes from target table
> also cannot be accessible. I'm not sure the v6 patch how to implement this
> limitation.
I changed this block so that it depends on whether the clause is MATCHED
or NOT MATCHED, rather than the action. I think it was pretty
nonsensical for it to be keyed on action type, and it made the code
needlessly longer.
Thank you!
--
Álvaro Herrera Valdivia, Chile — https://www.EnterpriseDB.com/
"All rings of power are equal,
But some rings of power are more equal than others."
(George Orwell's The Lord of the Rings)
Commits
-
Doc fixes for MERGE statement
- 5dcebd10baa8 16.0 landed
- 5bb88967ed5c 15.0 landed
-
MERGE docs adjustments
- d6d1fbf353d1 15.0 landed
- 3d895bc846f2 16.0 landed
-
Link to MVCC docs in MERGE docs
- ffffeebf2447 15.0 landed
-
Fix EXPLAIN MERGE output when no tuples are processed
- 12e423e21d8e 15.0 landed
-
Make EXPLAIN MERGE output format more compact
- 598ac10be1c2 15.0 landed
-
Add support for MERGE SQL command
- 7103ebb7aae8 15.0 landed
-
Split ExecUpdate and ExecDelete into reusable pieces
- 25e777cf8e54 15.0 landed
-
Add API of sorts for transition table handling in trigger.c
- 3a46a45f6f00 15.0 landed
-
Represent Lists as expansible arrays, not chains of cons-cells.
- 1cff1b95ab6d 13.0 cited