Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1nUdmb-0004qX-Di for pgsql-hackers@arkaria.postgresql.org; Thu, 17 Mar 2022 00:14:26 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1nUdma-0006wF-0w for pgsql-hackers@arkaria.postgresql.org; Thu, 17 Mar 2022 00:14:24 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1nUdmZ-0006w6-3Q for pgsql-hackers@lists.postgresql.org; Thu, 17 Mar 2022 00:14:23 +0000 Received: from mail-me3aus01olkn2157.outbound.protection.outlook.com ([40.92.63.157] helo=AUS01-ME3-obe.outbound.protection.outlook.com) by makus.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1nUdmV-0002en-V5 for pgsql-hackers@lists.postgresql.org; Thu, 17 Mar 2022 00:14:21 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=kdpdRcydtDyiiGLOguOxPgL4Jo/icYjHK5fsWyGch1+28lm8pWtSRG/taffjabyLgDXB4g7fzyAfJ94h0nuAPLQcHajT9aEEocJhi8/QfNkhOtEpAU9otxLmYoSjqby95XAETZMipl7PVD9jV8k7dbKHok/6/CEU5XwEmL+ZCjpzh8a5p3uhGTOgU0aHiz8c2z6LNR0DkySrRUhT88s+oBcTfIOCAI+je0q+bHwkopTluZTYXrYjFF0Bml6Ig4sw7Kg0NRU4vpcLr+PtL9nnC866NtzcIAwYFRHgFakib5cBJwgSZBjOu7zToQvMpws4jP2F1aO0VkkHeaY/5vKhOg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=HgIZM9YOJN6pnFyvLuC+W6uvMuPQ5Ajij/vW+rAmoIs=; b=KUhn/Zx9tRNwUlja/zvlhWwWoDONka/J8ncOXepcxKm/L20El2o/NVGseLAcYWn6Vhj4WgV51QSUgL7fHNW9DZ2hYSTDPa9LaY/SepJOtzNrVSf3T6hLOrkq9cb4ndIh6Thf8DDIuwGpIDk5aB1Kl+28yUrtwkGT9eFdvtvIYvQLutxwaR69WckHAHn4UbVdhhLUQYerR5mVh57GhJEc3ge/1B9+r6rDC9RVzvBoV7XLwcq4QI3hnzOvhsIMrUJfs3IkIPsqi/XxHnOMIO0atEg6xuHgYE1bvVpVmCZrEE+3xwGQABWY6nM5hBftR+BwYJxpx/ekwLqlHGqFQU2KkQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=none; dmarc=none; dkim=none; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=hotmail.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=HgIZM9YOJN6pnFyvLuC+W6uvMuPQ5Ajij/vW+rAmoIs=; b=P2bOZfHa6jRVUZp+xHt/p3LFL2HxUaA/C7KW8akmUNXeT/k7Edrqczv4wb3kjGft6QqTbd0K/8itBc4w1Bv1KC0p8r11a4b0qzxGwEYn5UT94SC1nGDEhI6mrxorWFum9Ju2rXXNv7sJKS3l3ymwrV/+FK8LnE3rWXeDg13DqGnwf2r7VmXinVtp+rsvcRqAijNlzBAKAO3LkAr8FX1Jrtyq0C1yRXOAuX7gXTerw9y8PrgX0vhCkY9eNmWOaM7hLpCAC3YZCGNcx96NlFrWY498fqL+RzCMJ4ApPUq/ODUuny/OZq04DS8nxZTrMnj5u/Qb/NW7dey1aoRQmC3t0g== Received: from MEYP282MB1669.AUSP282.PROD.OUTLOOK.COM (2603:10c6:220:c3::12) by SY4P282MB4174.AUSP282.PROD.OUTLOOK.COM (2603:10c6:10:1c9::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5038.14; Thu, 17 Mar 2022 00:14:13 +0000 Received: from MEYP282MB1669.AUSP282.PROD.OUTLOOK.COM ([fe80::d98e:eb30:1192:e1d2]) by MEYP282MB1669.AUSP282.PROD.OUTLOOK.COM ([fe80::d98e:eb30:1192:e1d2%7]) with mapi id 15.20.5081.016; Thu, 17 Mar 2022 00:14:13 +0000 References: <20220312160815.GP28503@telsasoft.com> <202203161918.qz6phlortw2w@alvherre.pgsql> User-agent: mu4e 1.4.14; emacs 27.1 From: Japin Li To: Alvaro Herrera Cc: Justin Pryzby , Amit Langote , Zhihong Yu , Simon Riggs , Pg Hackers , Tomas Vondra , Daniel Westermann , Erik Rijkers , Jaime Casanova , Andres Freund Subject: Re: support for MERGE In-reply-to: <202203161918.qz6phlortw2w@alvherre.pgsql> Date: Thu, 17 Mar 2022 08:14:07 +0800 Message-ID: Content-Type: text/plain X-TMN: [fACCAfJ2kFI6BJ0K1arwgC04HDo7MC89] X-ClientProxiedBy: HK0PR01CA0061.apcprd01.prod.exchangelabs.com (2603:1096:203:a6::25) To MEYP282MB1669.AUSP282.PROD.OUTLOOK.COM (2603:10c6:220:c3::12) X-Microsoft-Original-Message-ID: MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 63f1b8e4-7141-4f02-12dc-08da07ab10cd X-MS-TrafficTypeDiagnostic: SY4P282MB4174:EE_ X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: f8+R8GY3k5JPob3eeuARtxronZuJrx05GlVWzSiwu2/u/FRciBM3GzKeOHxfcEm8mQXd9jRTeD6QmNdHhGG1pw5FeRl7t//7BiAvEXTx2w1mjwLspWuvg9UT7iIsl+7pmupvUVgGQpQOcmMWsWotzh8ObNyFXl4atwPbrizcpbw8+LpHzY7+UZaXPBisUav6uE3Wmgd9I4z/gkP4AVWxY9WXwZ7QEzgmucWJntVR5mFhFNKlC6vq9lI0m2Kelk25Ppu2lL2ZXKi1DHPsZK3qDdbLmFEzgc1Ur+i9Q6mnmgGPglNhcu3hRMOKzdsS0ArrRrwBDIktrE2mXRK7ZHK4deHxPVGhAD9FrINqtPZjkXtvHa0JZLna2zUeIeiXz2l1UzAF8p4nB4c8eXlbwtOip498usFtSPwwhnJ+U0IFXzMJljSrjJtJKihrRzruBxqnbrcc58Pfpf7TwNtPLXp2fgHqSwsjIfH77nUtosD8eM5N0Idz6sKo356xpO4kep/n3+M/tIAP5g24zyf7hAxy+3w7pTtwpMVCcjoQ0AAwVT5+1veFRBEwOX1/D2Fh4K64bnRC+B/Neej+fhgFY8ZpwS9jm96YrrRTaujClUnDi2lqI4bNmpp3WT1dqzL5Dpmx X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?7YQyH2IlP6CjiKQ0qy1GcstoAfmByKumxVKLsT5kkn0HqXVZ6Z//XL4eBwzZ?= =?us-ascii?Q?KKvXBqYdjMFOk6e5gerqQqR3PMzUWVe/GBZT/B5mH76FgafCZM/7zeMBlZDY?= =?us-ascii?Q?axs/s7cA7PWeA2u0fxAfLyGhzHG+dwdQhleF2rkO109teeOOxNogUW4DI6hn?= =?us-ascii?Q?4GxieAMONcgDP/rRODqWG7e3TNSUpaJUMF0QjeyiEi0Vf8c5NVpU1+etPXAh?= =?us-ascii?Q?1Gr/oxbEKqapVY5cky01zCyO81kpT+XGSjfSTQP5EAPM0JfpcJz2TYy6yuXW?= =?us-ascii?Q?b4zMnCMGb0AuSUTe1tTdlRJhDAruztdlSYKHNf4M9QaPQWQixWumJevOk3tw?= =?us-ascii?Q?/eb+9AddeREnlK/bQyu3UGRD+82jw1hPtOoO1X924T0TTPgTqLuNzQAVM6uX?= =?us-ascii?Q?dgTqmTINMAwOKK6oge4lihn/82eYNpCjO/+zTMpYWRefupFRiEtOxsQbkLI2?= =?us-ascii?Q?5op9aQ55JjzdHbqSw6acUQfuKagFz4yYBDnIJTd7gTXuZ9aFVgBoJoj7gE4m?= =?us-ascii?Q?nIYchz10ykfdQ5A9UsoRdemhZSv7l637qWf4ixcnMj1V+ZLAQzYjOsc2Rp3n?= =?us-ascii?Q?Hl2gL8WOO+MvcW0euDEVM44yvmjMU1Segl/+ZfG39Rejtfg0pn7h8JP2y7OY?= =?us-ascii?Q?XYr9hFxUk6DcP/RPkrwKffcZ8/sZTYae3YHO+nQc/VTC6GmLRIQV4Wl0xL76?= =?us-ascii?Q?jsnEdfBtcBNXb7takyRLia9tgNKykt7PJkWT0ygSDsAxpwaCwHQ5jm7qrf8L?= =?us-ascii?Q?aR+tWiEkoNBx6tsWxhTyAeKN/+9WJHF3hSs5NJ3F1x6qRBSeJWsTP+rm8c2C?= =?us-ascii?Q?rhrLoronK7Zh4c3XDhVx5Oj1zFE3DipY3x6s5AIqbUwEDWcP+2N2CuV5M2hv?= =?us-ascii?Q?DRDfmn8cO6yD34NUXZkn0w2TKQvnJBdYiSuqwK0va6CTVdEyJ822Sv/4YkJ/?= =?us-ascii?Q?s9jTInbEMkq+akeuninNDg=3D=3D?= X-OriginatorOrg: sct-15-20-4755-11-msonline-outlook-746f3.templateTenant X-MS-Exchange-CrossTenant-Network-Message-Id: 63f1b8e4-7141-4f02-12dc-08da07ab10cd X-MS-Exchange-CrossTenant-AuthSource: MEYP282MB1669.AUSP282.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 17 Mar 2022 00:14:13.1523 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 84df9e7f-e9f6-40af-b435-aaaaaaaaaaaa X-MS-Exchange-CrossTenant-RMS-PersistedConsumerOrg: 00000000-0000-0000-0000-000000000000 X-MS-Exchange-Transport-CrossTenantHeadersStamped: SY4P282MB4174 List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk On Thu, 17 Mar 2022 at 03:18, Alvaro Herrera wrote: > v16. > On 2022-Mar-14, Japin Li wrote: > >> + ar_delete_trig_tcs = mtstate->mt_transition_capture; >> + if (mtstate->operation == CMD_UPDATE && mtstate->mt_transition_capture && >> + mtstate->mt_transition_capture->tcs_update_old_table) >> + { >> + ExecARUpdateTriggers(estate, resultRelInfo, tupleid, oldtuple, >> + NULL, NULL, mtstate->mt_transition_capture); >> + >> + /* >> + * We've already captured the NEW TABLE row, so make sure any AR >> + * DELETE trigger fired below doesn't capture it again. >> + */ >> + ar_delete_trig_tcs = NULL; >> + } >> >> Maybe we can use ar_delete_trig_tcs in if condition and >> ExecARUpdateTriggers() to make the code shorter. > > ... Well, the code inside the block is about UPDATE triggers, so it's a > nasty to use the variable whose name says it's for DELETE triggers. > That variable really is just a clever flag that indicates whether or not > to call the DELETE part. It's a bit of strange coding, but ... > >> +MERGE is a multiple-table, multiple-action command: it specifies a target >> +table and a source relation, and can contain multiple WHEN MATCHED and >> +WHEN NOT MATCHED clauses, each of which specifies one UPDATE, INSERT, >> +UPDATE, or DO NOTHING actions. The target table is modified by MERGE, >> +and the source relation supplies additional data for the actions >> >> I think the "source relation" is inaccurate. How about using "data >> source" like document? > > I debated this with myself when I started using the term "source > relation" here. The result of a query is also a relation, so this term > is not incorrect; in fact, the glossary entry for "relation" explains > this: > https://www.postgresql.org/docs/14/glossary.html#GLOSSARY-RELATION > > It's true that it's not the typical use of the term in our codebase. > > Overall, I'm -0 for changing this. (If we decide to change it, there > are other places that would need to change as well.) Thanks for the detailed explanation. -- Regrads, Japin Li. ChengDu WenWu Information Technology Co.,Ltd.