Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1tzEEE-00Gx8g-Cz for pgsql-hackers@arkaria.postgresql.org; Mon, 31 Mar 2025 12:26:58 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1tzEED-005Dgs-4d for pgsql-hackers@arkaria.postgresql.org; Mon, 31 Mar 2025 12:26:57 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1tzEEC-005DgK-G4 for pgsql-hackers@lists.postgresql.org; Mon, 31 Mar 2025 12:26:56 +0000 Received: from mail-japanwestazon11020115.outbound.protection.outlook.com ([52.101.228.115] helo=OS0P286CU011.outbound.protection.outlook.com) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1tzEEA-0028J5-24 for pgsql-hackers@postgresql.org; Mon, 31 Mar 2025 12:26:55 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=NKdvRAA/gMup5zTVKUkxyY+0QaTLn2LvGSBkX0kVGeAff95X7C1T2UEtBvfQv7RtNPn34RjAa4DGDiHcqPzZMMDE9GGI48EUqbr8b33jeR1wxuHJlld3q5ydt5h4NZvwC18/qBSlmR5BnZoFI3ztz2HyaiZdXlUcg+YJZGj2BbKAIiFGdNjPvX5yzIWqIpqRo7jJOcNGe39MGs2WNtOLp8CDnr6/6ob6HnkSUt5+8qHv+xcG1UOJ7EcTVvFPPkdlUOKfTNWlu1dyeSiPwrW+k+zzn0tWKJr7KtBe47IEhgpHsCFvncOVP5IOARTR7hIqAwabouFcZ+QttWpShpOUMQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; 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=hcUXr8UekNAplKmVELXNeM9Uqu4vqlkPRNQ9UWj7v5k=; b=Cc6KyTSFrNT3CzGqGMHBaO/igNifKS1QEBBdMaVrgY4+Yu30cdYZFsJ6UuwoVCMLb1H3eBwXlVTQ/mCsyppNLl/2d33Uh46C4IgDVpWz14LUHuhF+lTLbadgKQjqwdmm9TRrCrGegWr/BcQRNg2kCSzdj7j6rH1RaHZI4yptPeDY0xnVZQ5Wfy0ZvVGNwjMiVJZlqASNTZxYSsF8u1NF4uHpa8tWNjZbq8a1MuK8ul3ZU/r2LR4VU1leBomIwVAwlzDtsJSeG0bkNl6vHupEgk6dQJ0C7vgFZbdwEvNgY790lMawpcmUddV3nOSUHWweT/RventS3Rc7gfVrNAUCNw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=sraoss.co.jp; dmarc=pass action=none header.from=sraoss.co.jp; dkim=pass header.d=sraoss.co.jp; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sraoss.co.jp; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=hcUXr8UekNAplKmVELXNeM9Uqu4vqlkPRNQ9UWj7v5k=; b=UoU5BdkdwaHEiGFBynFkrphJ0valXKxLe9M5Rttc4YVg9sb6xAacJvF4HLEzzgo1+YXRn3wItSx88OJbGPf10ObyOFYRLHfFy3yfqdDmW8syzHP5fyvpiRd9895HTiFrMxEC4OWEjKetyc1V+syhERjvXr7oTwlxRGBLfncZUx84x0WXofzH7qY4W0fhPNeLomJyGCa7j74rmdBLrwzAKJ9ZKjm7chnDqLIo1XgNFI/yLw+3BwdOMGQ7KwcOkNDvT6jcKPFLZ0motsrIjzVHrI2VRxs7D/5zn4ndpTI6GHKIH6WnfTj2QhpYi4PkAEZov4AmOJkq8PN/i3Ef/h8voQ== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=sraoss.co.jp; Received: from OSZP286MB2160.JPNP286.PROD.OUTLOOK.COM (2603:1096:604:189::12) by TYYP286MB1473.JPNP286.PROD.OUTLOOK.COM (2603:1096:400:fb::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8534.44; Mon, 31 Mar 2025 12:26:49 +0000 Received: from OSZP286MB2160.JPNP286.PROD.OUTLOOK.COM ([fe80::a4f:22fd:288:2dcb]) by OSZP286MB2160.JPNP286.PROD.OUTLOOK.COM ([fe80::a4f:22fd:288:2dcb%3]) with mapi id 15.20.8534.043; Mon, 31 Mar 2025 12:26:49 +0000 Date: Mon, 31 Mar 2025 21:26:48 +0900 From: Yugo Nagata To: pgsql-hackers@postgresql.org Subject: Add comments about fire_triggers argument in ri_triggers.c Message-Id: <20250331212648.ad4ab804559001d7f0788741@sraoss.co.jp> X-Mailer: Sylpheed 3.8.0beta1 (GTK+ 2.24.33; x86_64-pc-linux-gnu) Content-Type: multipart/mixed; boundary="Multipart=_Mon__31_Mar_2025_21_26_48_+0900_1OSvr8H/6=PK4=NG" X-ClientProxiedBy: TYAPR01CA0087.jpnprd01.prod.outlook.com (2603:1096:404:2c::27) To OSZP286MB2160.JPNP286.PROD.OUTLOOK.COM (2603:1096:604:189::12) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: OSZP286MB2160:EE_|TYYP286MB1473:EE_ X-MS-Office365-Filtering-Correlation-Id: e2e00aef-001d-4384-b279-08dd704f4f31 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|366016|1800799024|10070799003|4053099003; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?/HXuzNLZNekMd81b3EaCokAuaRUIrPsruPb8YtQ6+cuEampP5bAuag+0neEW?= =?us-ascii?Q?tMQPrmhNUrMpbkMSWnkGTUh/Y9D4ZVbxZFr4GRuniaTI+zO1+ivhgvZ4DXa5?= =?us-ascii?Q?QEuA5blsPINb+VM/hFQGeamcJSlAFMlmvY8IH8sD+lUwkJjYaCUdn7+QQM4D?= =?us-ascii?Q?y4NXB7lX7h2UrKGhfGeGHAV4DruG8l8gh7Z0HsT5OQ5q0Pu5qnMWcefAoiYq?= =?us-ascii?Q?I9Mb+lBEi3p5Laj1QJ7VBDrU6x4kfrzN5KLblKztkhL4QXBi+Ps1OFaObG75?= =?us-ascii?Q?T8OcJY4exMpa+hgom/ZKravI97gwUPpqcp66Mk2qyjJ51jXaNR48ozqAemxD?= =?us-ascii?Q?awvM7D62aQcjWHIYvP+rCWP+M1KEqfm4aCpJcHspA5dNItA3KO3BfvcNlIma?= =?us-ascii?Q?5UdDHY7uL6f6hI5AAysONb58rXJRirz4R1uxK27XT0tFENpyXyvMxptJ2uB3?= =?us-ascii?Q?SGA9afGneKF6G0LGc//p4I3l06DnuIKmcoi7yltueQ5Lf1zHTjnzwvoFAP5X?= =?us-ascii?Q?2u/IK2YMuXviDvBnUbV97cotJoD+SS4yoTimEjGMWst21wGPme54kjU6Rcp2?= =?us-ascii?Q?VR5o8jcaXKBqlhPwHxgvo21GNJKSl6WjM3f+bKv2KMGh9xWfmtb8S/Wl0zPq?= =?us-ascii?Q?aoUp7tAi1vSu4YcKLXen3bY7S7RSc1fpUGLKJHZb2BUty9DRSs2pnXpFXF8/?= =?us-ascii?Q?wnvWH2QIYSpiAyTjVJbJkMkx/tXwonlKxTy0UUNIwZBY4Brh4esMMWwch+O9?= =?us-ascii?Q?UFKYtNavJkLx4dI88GVjh5Tm/teOXn17870wWCuFyB0daBVxctcWK0VMqzjS?= =?us-ascii?Q?ZOzUh6/yAO5tHhpcQ/A9FHeZvOHF/Nk7l4UQf1ZyIIXY3zGRUNICb7EpFed0?= =?us-ascii?Q?rqWv5NG4VQr4/O4rDb67Lna8Yao4RvCaAySAFHOua2BdJvF/Lr/JBk4qLsTa?= =?us-ascii?Q?IR7/yM80icluCdC+ncJ2Qvtq5f0BLYVZrqFEjR3k3VQS5XAWFyGwm00XCQ6g?= =?us-ascii?Q?lpgjrKFxu2SHnWJfLezez47FND0o2QCPYZKX6HQym/yd41olsIKH842AyZgc?= =?us-ascii?Q?0ovCY3u0D7LtoNw5R7pLrNvnGkg+nuFs6JfsupH574HVNYJDahk1CBNeYO0c?= =?us-ascii?Q?1SxWwdhCo1qWr1Bn0QdzcrTa9wpIuTeUvsge5Ll+0/fq6aCjrU/h8HnEOw3f?= =?us-ascii?Q?RmBszkDFNAInlnFKr0xDUzrbcQGU+D7HcNgq4StzjLHO0pZSNpz4UUY4V6BN?= =?us-ascii?Q?223XOYxqrp4yPNWCUhqg9ax1lT5oBBUswZTcakHpnVYY7RHmyWDqH5xgMcXX?= =?us-ascii?Q?yoS0hkvE7ePgNaualyE67H121Av9It+VmnvmQChCKC91WKPWB2ygYofH+J8q?= =?us-ascii?Q?40Y6MpBgOBKRbFsUZ5tcP6olMUEN?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:OSZP286MB2160.JPNP286.PROD.OUTLOOK.COM;PTR:;CAT:NONE;SFS:(13230040)(376014)(366016)(1800799024)(10070799003)(4053099003);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?qGm8afl5n3tt4XosWjPAF8KpS1cqdQAbpEbr2/y35iiOKje2elMjIycv5XX8?= =?us-ascii?Q?W3CJxQMCZ++w95h1YE2yFa+P59wP5JzqTjBcTBzSE0P+lsEfvld/P0W1yWPT?= =?us-ascii?Q?TZXmVsz2LYXSTXbt0ql1qNjq3u9/cfUPZK9Fa9b8jubUBx0ae/SaqhuRnRLr?= =?us-ascii?Q?QyLzImWSkq6g7jOZQ2eEABqnfrFvcLnFEoXqRy7JE31CbIZqIlqOnStcqIqH?= =?us-ascii?Q?Zx9fDePVmetts2a7ZarJZW2sLwUkpPF7WAN2lNYw3m6AL5jSYrL/IEfqBEq3?= =?us-ascii?Q?1qUPT3liaBCj2AHu8GV2oeBt4M2Xx42akcdSZkruN3dZGzSWhViL7s2aM/dh?= =?us-ascii?Q?34jG1fhHjzCra0ZGMZr75G2er1udITGxm3R9rIEj5BHyESOWWKjeF5txO59u?= =?us-ascii?Q?TT4aFzeKIlEECoDD/WQl32jFvz7C1GO/wHR3zWZcbQsKN2J1f0NvBbzBvUPd?= =?us-ascii?Q?KOKaTOsy2TDvVtumudn4QlotvOdfnJxK9HCgOeysesohA9KK5iM54am04+5c?= =?us-ascii?Q?d163NoAVw07aM5TIwDuy+uVCMxurplMRCegY8gjjpyGmCI89Ex8bRwU2+1av?= =?us-ascii?Q?9MUnZ9Qx8zhrOnIGFEMB7b2V/V6ZLXwe4RS/z4gD3WnIcaV+BkhIUoea3u6J?= =?us-ascii?Q?dsAzwnC53VKCnXVNaiMw9BBdnFxS4lwo37j3DLNKOSypxpbXW3ed4+cYzR0P?= =?us-ascii?Q?XwmqFrFPdJ+VDuLHdumch8qjRIX/gQfhtCmj0vHtmWiflQPA/oco8m+LVsSb?= =?us-ascii?Q?ol9MB7hVP6wp6fPBInvwyjOwXLlYgdz4ZGKsvoSBLbaYMg2eVPgtIvDS+IeX?= =?us-ascii?Q?DmLieDWw9c20r93Dg9I6g8ErsnvXTA4CIYMTVhWQf3rIrUg/VeP535gJZ4/O?= =?us-ascii?Q?cpm8c9DSzLEqbA2JiKX3GnRzg1GHeUvzDTtmmJpudbqH1Nr+Vq23B/F0Zy+g?= =?us-ascii?Q?JLKxnjGdEwOY/EBxj45TnOf4O4DXYga8Qd7nFIoAcotxzOlvk3RZi3J5EQlE?= =?us-ascii?Q?meD/QmGuFLRfYsgVir7u9jfKoqDA8SHSohCBlkpiO9SmJPS4zU26GkF49mo5?= =?us-ascii?Q?xLI4oF3SNVJc1eoJ1jlKW65W0aVSC2bD3kq7HH7nlvAPGU6nvirREQiumISN?= =?us-ascii?Q?GJlOgi9Tr9bR7X3JFScdbVbPkPzH3PhFk6hGanuRXI+J5kxV77nVoz/P3ZyG?= =?us-ascii?Q?ZrhWOcrQq/sozq2bssi3WxJKgEtlNvlj6zYxvMDAFS7o0YqGzanm4H1Czk8k?= =?us-ascii?Q?kmrZbYb6v54cDylV4YHvoqirAFCRUurta6y69/i5OM/fOHj7FvMpI/U/XqYO?= =?us-ascii?Q?wI3vXesQJWB2/Cx68SJSzq8GT/RrWJfsLnb9vVXTROnn4T0e4lvl0uOxV/xj?= =?us-ascii?Q?+16vC03Qk7vGABHtsnvQvIdUyZM0UBRuKRxtdm+KcLJ6Ir0a4JqwtHKXTn2Y?= =?us-ascii?Q?O3IDRdZy+qhg/XGyr5zFwAtmYu3sqoVWjvfVVHZNQvr3UqGYMgn/ge5vkTeV?= =?us-ascii?Q?/QuAD29RPi7bFT1wph4mn+fa673zlvSYwsqEMg5VfFx6gOGxD8zb96ZuOp/C?= =?us-ascii?Q?daSVkp4Yfx+heCkC7udmoHDW7GCu/gk0j+J1JPHOtw328Rh+NX/vDa2/66zZ?= =?us-ascii?Q?VBplkVEyKSfHy3cWXZYlivvSrbMAX5/hiXLN4wf0cgMj?= X-OriginatorOrg: sraoss.co.jp X-MS-Exchange-CrossTenant-Network-Message-Id: e2e00aef-001d-4384-b279-08dd704f4f31 X-MS-Exchange-CrossTenant-AuthSource: OSZP286MB2160.JPNP286.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 31 Mar 2025 12:26:49.1141 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 75db6c32-352e-4063-ae79-cafb8623f6db X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: tmlSfuVXt7n0R83yRqwc1rjlGe372iElH7LNw/J23M7ulI/Nsk2yJ2zcQkrsCLFuVLSegDioyjyyyOHDpVoP3g== X-MS-Exchange-Transport-CrossTenantHeadersStamped: TYYP286MB1473 List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --Multipart=_Mon__31_Mar_2025_21_26_48_+0900_1OSvr8H/6=PK4=NG Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit Hi, SPI_execute_snapshot() has a argument called "fire_triggers". If this is false, AFTER triggers are postponed to end of the query. This is true in normal case, but set to false in RI triggers. This is introduced by 9cb84097623e in 2007. It is aimed to fire check triggers after all RI updates on the same row are complete. However, I cannot find explanation of"why this is required" in the codebase. Therefore, I've attached a patch add comments in ri_trigger.c for explaining why fire_triggers is specified to false. SPI_execute_snapshot() are used in a few places in ri_trigger.c, but I added the comments only in ri_PerformCheck() because SPI_execute_snapshot() are used only for SELECT quereis in other places. Therefore, I wonder fire_triggers is not needed to be false in these places, but I left them as is. Regards, Yugo Nagata -- Yugo Nagata --Multipart=_Mon__31_Mar_2025_21_26_48_+0900_1OSvr8H/6=PK4=NG Content-Type: text/x-diff; name="add_comments_fire_triggers_in_ri_triggers.patch" Content-Disposition: attachment; filename="add_comments_fire_triggers_in_ri_triggers.patch" Content-Transfer-Encoding: 7bit diff --git a/src/backend/utils/adt/ri_triggers.c b/src/backend/utils/adt/ri_triggers.c index c4ff18ce65e..45d7e6268e4 100644 --- a/src/backend/utils/adt/ri_triggers.c +++ b/src/backend/utils/adt/ri_triggers.c @@ -2580,7 +2580,13 @@ ri_PerformCheck(const RI_ConstraintInfo *riinfo, save_sec_context | SECURITY_LOCAL_USERID_CHANGE | SECURITY_NOFORCE_RLS); - /* Finally we can run the query. */ + /* + * Finally we can run the query. + * + * Set fire_triggers to false so that AFTER triggers run at the end of + * the query. This ensures check triggers fire after all RI updates on + * the same row are complete. + */ spi_result = SPI_execute_snapshot(qplan, vals, nulls, test_snapshot, crosscheck_snapshot, --Multipart=_Mon__31_Mar_2025_21_26_48_+0900_1OSvr8H/6=PK4=NG--