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.96) (envelope-from ) id 1w71Ew-004sUl-1n for pgsql-hackers@arkaria.postgresql.org; Mon, 30 Mar 2026 01:16:26 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1w71Et-000GQ7-0k for pgsql-hackers@arkaria.postgresql.org; Mon, 30 Mar 2026 01:16:23 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1w71Es-000GPz-2j for pgsql-hackers@lists.postgresql.org; Mon, 30 Mar 2026 01:16:23 +0000 Received: from mail-pf1-x433.google.com ([2607:f8b0:4864:20::433]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1w71Eq-00000001uVo-1rgm for pgsql-hackers@postgresql.org; Mon, 30 Mar 2026 01:16:22 +0000 Received: by mail-pf1-x433.google.com with SMTP id d2e1a72fcca58-82418b0178cso1852870b3a.1 for ; Sun, 29 Mar 2026 18:16:20 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1774833378; cv=none; d=google.com; s=arc-20240605; b=RVZJgbbvpjHeX1m2ee3fJzTQM08ZA/LJsExtJi8OeS4aG/54RQbECXk2DMuINouCFM n6reUN7s/FKP+LavkrN9wKE97HlIF4LX45k8lzNKZ/UYBrMbZ8aGGdJaDbUj5WQXyoi9 9Jbe6Gabwa9AoXmZ2osbWkvYyT6yOlofoDhpVbGUVxLqkv6Xazg1JRVL4IWVjn0B7IqY f849eiyZWBs6tGwfwrMd8A2fQ0fo6E44i629fZjj2L3KNb1xEaudXNkaGomgIOqQ7R+z zkWeknLpve2N7dBKoT/55YR8eI7A2FTVOliHsCsmLHgzQpNEA8JJx0/bGWaxCBDo+DDG LHnA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:dkim-signature; bh=fsVr0OKMxBvLEDv1o3W9Aw/tfKiACh+5q0yK+AhIRt4=; fh=7RCcfHilymBDED+yoieu+QqgLDU3M8yuwpMfdzbIZS0=; b=lUbAzxg/90u8Z0vDgE/VnRWRvZtQG+/8MPPLWvuWtfcDf9H7vc5htarPZDGa/+pI67 semAznLDMCC2fkuY+lapsFKXX/nQIq0UelXau2KDfhjfkzALlZWH5khu6ewIqvaIFWMk KjHXjIYK2G0RaPxn+so828vllddl4auMVE6xSkKKbS4/SYvdnNiOpETypj+Aw+feERNK AH1qCzAJ8IpwWXLBKR67Flsyp7ZalR5ri9nkCTz0DuE9HqUZE0yiYm9FAiP/v48B2EnC 3MDw4oRz1wX0DHdHqQmULCls8P2ef19ZZsmRBGA+yrtEB057DKYjvdOgcynT+rlxEWrf y4Ew==; darn=postgresql.org ARC-Authentication-Results: i=1; mx.google.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1774833378; x=1775438178; darn=postgresql.org; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:from:to:cc:subject:date :message-id:reply-to; bh=fsVr0OKMxBvLEDv1o3W9Aw/tfKiACh+5q0yK+AhIRt4=; b=ijQpnyzy57KlOk7b8GgRJhYI22wB6WiPJnRLmQZ8cncvqNkpuSRL4syNSUuK1cFfFb EMLY7eMvWuqN9q7x6lMskJCrgGC0pk2KNvz1KLC241p73u1fdcKMimlUt+ZOf4yk6Mc2 UOym75qU63adATjC7yYUu13ejfhlZksngsfDN6wlZVrtZb11nMm4UqAfYnEkHKYSD6vo UJvFaVAuZPMGyoY5Hf0jD42JreC6avx9rUrkiWDQl8o74QBvh5tMol1ng9Z1i250915P z6dFyvQlBzrsP2cCZLodkNcxRvxKdzVrIFIgIhS6qqnSZ3ei7uuryaSzfY/whj1gdJua pXNA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1774833378; x=1775438178; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=fsVr0OKMxBvLEDv1o3W9Aw/tfKiACh+5q0yK+AhIRt4=; b=QpimGXVne+v7SoOl5AHRdzJSii6vlT11LnRzIvM4lUcL9cq6Iqqw26w5cpSC/2VZcK 5iNOzKyPpSSUxNwrAGF2yLhN/f++1t0JR4aH96CN5zrZBVLRFdjlNX5PUtQjHWb2bIi+ I5fbjUfnSJ5+MqKK4hMkbmHUJffNMLI8bzqUT5VxTB+76g5VNKwBod2b25fpfpMkRnpD C6Vrew7V3Hsr43NfD34FFY/RqECmB9C6136VbS9zn3pnTN5EThesb552CKehbwdcJ+Q5 wNKU5JS3SXiYYp+xfBiox6DO0P1aPtVBeGT/nAH5ncDxU94SdFYboGEeihLU9fD9ndX2 0b7Q== X-Forwarded-Encrypted: i=1; AJvYcCU4RuIrqQwmmUVLdmKoYTy/MrsGgwr+uhpzTj8H9veY7ws3LhAwfn8T7AxM3mBCCKIHFvii1tp94wESD+4z@postgresql.org X-Gm-Message-State: AOJu0Yz+zaA8YcXNBpbqvq2Ufek6d7wloE34oGJFuuobD2smn9TqIiex VTlmZVin550VmsGipJGa3HDj5I8qkiXURmpJhnAIhR4INKpEYK1KXkwnYqy/YbbzTG/6qA4kbZV +0YhvGYdPEXUW246EUKpYNkncMWqW104= X-Gm-Gg: ATEYQzwMUsXABITYALu2Y8dfWCIX3bSP0kJaSjJu0uK7k/dJmhcz6geKzmiPSNwhd6R fyceHxIURmUvpR2V1XVil0Hx5RIpk1NrIna3ju419NTN6QpF6J0O3iMXqkIp/4kVd75hDwMLKw8 xRpT2sbeCiuTzDZS+5kQY/dTulG64K/05GYdjqDAGz+nqVc5tP2uf/2mAEX4TWeOgqzAe+1rmwk 2LSj13w2VUd5sRVmZzxL1owEabk17nmRet0dObdNxztVdChX9hdWrMkqvyS4Kg+LueziKv+sGda TZDKSZso X-Received: by 2002:a05:6a20:7d9a:b0:39c:4b84:d90f with SMTP id adf61e73a8af0-39c878491a3mr10268338637.8.1774833378260; Sun, 29 Mar 2026 18:16:18 -0700 (PDT) MIME-Version: 1.0 References: <20250331212648.ad4ab804559001d7f0788741@sraoss.co.jp> <20260327005646.8b9df4658b2dd510d3f95ec0@sraoss.co.jp> <20260327120057.04d16c1240fe402a3a093ada@sraoss.co.jp> In-Reply-To: From: Amit Langote Date: Mon, 30 Mar 2026 10:16:02 +0900 X-Gm-Features: AQROBzBiSKWefKcS5bWmFvjfN5gQiIZkrFfWau9gxBB2sg5mndk-RxSer-NwmjU Message-ID: Subject: Re: Add comments about fire_triggers argument in ri_triggers.c To: Yugo Nagata Cc: surya poondla , pgsql-hackers@postgresql.org, Kirill Reshke Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk On Fri, Mar 27, 2026 at 2:36=E2=80=AFPM Amit Langote wrote: > On Fri, Mar 27, 2026 at 12:01=E2=80=AFPM Yugo Nagata wrote: > > On Fri, 27 Mar 2026 09:39:17 +0900 > > Amit Langote wrote: > > > > > On Fri, Mar 27, 2026 at 12:56=E2=80=AFAM Yugo Nagata wrote: > > > > > > > > Hi, > > > > > > > > Thank you all for the review and comments. > > > > > > > > > Yes Amit, I agree that SPI_execute_snapshot() comments do provide= some > > > > > context on AFTER triggers, but I still feel the newly added comme= nt > > > > > in ri_PerformCheck() gives additional context on why the fire_tri= ggers is > > > > > set to false. > > > > > > > > Yes, that is what I intended. The existing comments on > > > > SPI_execute_snapshot() explain how the fire_triggers parameter work= s, > > > > but I would like to add a comment explaining why the AFTER trigger = for > > > > RI needs to set it to false. > > > > > > > > If the explanation of the effect of fire_triggers seems redundant, = I am > > > > fine with the following shorter version: > > > > > > > > + * Set fire_triggers to false to ensure that check triggers= fire after all > > > > + * RI updates on the same row are complete. > > > > > > Thanks for the updated patch. Yes, adding the comment might be good, > > > but I'd suggest a small tweak: > > > > > > + * Set fire_triggers to false to ensure that AFTER triggers > > > are queued in > > > + * the outer query's after-trigger context and fire after all > > > RI updates on > > > + * the same row are complete, rather than immediately. > > > > > > Two changes: > > > > > > * "check triggers" -> "AFTER triggers", since fire_triggers=3Dfalse > > > affects any AFTER triggers queued during the SPI execution, not just > > > RI check triggers. > > > > > > * mention of the outer query's after-trigger context to explain the > > > mechanism by which the deferral works. > > > > > > Does that additional context help? > > > > Thank you for the suggestion. > > That looks good to me. It is clearer than the previous version. > > Ok, will push the attached. Pushed. I verified locally with a test case involving a CASCADE DELETE on two parent rows that the comment is indeed accurate: CREATE TABLE parent (id int PRIMARY KEY); CREATE TABLE child (id int REFERENCES parent ON DELETE CASCADE); CREATE TABLE log (seq serial, msg text); CREATE OR REPLACE FUNCTION child_after_del() RETURNS trigger AS $$ BEGIN INSERT INTO log(msg) VALUES ('child deleted: ' || OLD.id); RETURN NULL; END; $$ LANGUAGE plpgsql; CREATE TRIGGER "A_child_after_del_trig" AFTER DELETE ON child FOR EACH ROW EXECUTE FUNCTION child_after_del(); CREATE OR REPLACE FUNCTION parent_after_del() RETURNS trigger AS $$ BEGIN INSERT INTO log(msg) VALUES ('parent deleted: ' || OLD.id); RETURN NULL; END; $$ LANGUAGE plpgsql; CREATE TRIGGER "A_parent_after_del_trig" AFTER DELETE ON parent FOR EACH ROW EXECUTE FUNCTION parent_after_del(); INSERT INTO parent VALUES (1), (2); INSERT INTO child VALUES (1), (2); DELETE FROM parent; SELECT msg FROM log ORDER BY seq; msg ------------------- parent deleted: 1 parent deleted: 2 child deleted: 1 child deleted: 2 (4 rows) Thanks again Nagata-san for the patch. --=20 Thanks, Amit Langote