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 1kTZdX-0002eN-24 for pgsql-hackers@arkaria.postgresql.org; Fri, 16 Oct 2020 23:59:51 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1kTZdT-0005jr-Ah for pgsql-hackers@arkaria.postgresql.org; Fri, 16 Oct 2020 23:59:47 +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 1kTZdS-0005ii-C5 for pgsql-hackers@lists.postgresql.org; Fri, 16 Oct 2020 23:59:47 +0000 Received: from [66.111.4.25] (helo=out1-smtp.messagingengine.com) by makus.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1kTZdL-0000ES-4L for pgsql-hackers@postgresql.org; Fri, 16 Oct 2020 23:59:45 +0000 Received: from compute2.internal (compute2.nyi.internal [10.202.2.42]) by mailout.nyi.internal (Postfix) with ESMTP id 59C145C0135; Fri, 16 Oct 2020 19:59:28 -0400 (EDT) Received: from mailfrontend1 ([10.202.2.162]) by compute2.internal (MEProxy); Fri, 16 Oct 2020 19:59:28 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:content-type:date:from:in-reply-to :message-id:mime-version:subject:to:x-me-proxy:x-me-proxy :x-me-sender:x-me-sender:x-sasl-enc; s=fm1; bh=RXsweAVGvHpnwAr2H 00TF8OyoZOesTDuGpWv0/1ZhNo=; b=OmqZ1wfdIrYLbDcwFxTOM0yg+Jz15aOh4 BMD6yPxf8PIrvjHsl2No75M1x+haQ4TCEW19H+4Jy4qMlJaKZAlwjxP7hAkgKIJ5 O3XotHy8JDmk5fhzt2EEa4pdXSAw6sPvFMV+yhNGANRvLw5W+nkMocCfd5/ENO1X ENua3FfVuRASgO78XCF+oL6BemMaL16IJSp0/mA7pjzVE7CBoFp2ETlB+Qo9SRaY Q5KpqEWq1tLQKpXA2lRo0dK5NPj/C4TgDeNgkNW96kvk1cPo7ie18kgoJjMSe9CE hkjdNYsXlQr5spR8Xp/jadcE1haPlEpvfu8XnVxytigTjcm81Z4Vw== X-ME-Sender: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgedujedrieeigddvlecutefuodetggdotefrodftvf curfhrohhfihhlvgemucfhrghsthforghilhdpqfgfvfdpuffrtefokffrpgfnqfghnecu uegrihhlohhuthemuceftddtnecusecvtfgvtghiphhivghnthhsucdlqddutddtmdenuc fjughrpeffhffvuffkgggtuggjfgesmhdtreertdervdenucfhrhhomheptehlvhgrrhho ucfjvghrrhgvrhgruceorghlvhhhvghrrhgvsegrlhhvhhdrnhhoqdhiphdrohhrgheqne cuggftrfgrthhtvghrnhepieeghfelueduheegtdekjeehueffvddujefgteduieekjefh udefgeefiedvjeetnecukfhppeduledtrdelhedrudelrddugeeknecuvehluhhsthgvrh fuihiivgeptdenucfrrghrrghmpehmrghilhhfrhhomheprghlvhhhvghrrhgvsegrlhhv hhdrnhhoqdhiphdrohhrgh X-ME-Proxy: Received: from perhan.alvh.no-ip.org (unknown [190.95.19.148]) by mail.messagingengine.com (Postfix) with ESMTPA id 9EB63328005E; Fri, 16 Oct 2020 19:59:27 -0400 (EDT) Received: by perhan.alvh.no-ip.org (Postfix, from userid 1000) id 3D5602A0E24; Fri, 16 Oct 2020 20:59:25 -0300 (-03) Date: Fri, 16 Oct 2020 20:59:25 -0300 From: Alvaro Herrera To: Justin Pryzby Cc: pgsql-hackers@postgresql.org, Amit Langote Subject: Re: CREATE TABLE .. PARTITION OF fails to preserve tgenabled for inherited row triggers Message-ID: <20201016235925.GA29829@alvherre.pgsql> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="pf9I7BMVVzbSWLtt" Content-Disposition: inline In-Reply-To: <20201016165934.GA5479@alvherre.pgsql> User-Agent: Mutt/1.10.1 (2018-07-13) X-Host-Lookup-Failed: Reverse DNS lookup failed for 66.111.4.25 (deferred) List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Precedence: bulk --pf9I7BMVVzbSWLtt Content-Type: text/plain; charset=us-ascii Content-Disposition: inline On 2020-Oct-16, Alvaro Herrera wrote: > I also just noticed that ALTER TABLE ONLY recurses to children, which it > should not. Apparently I wrote (bogus) bespoke code to handle recursion in EnableDisableTrigger instead of using ATSimpleRecursion. This patch seems to fix this problem. --pf9I7BMVVzbSWLtt Content-Type: text/x-diff; charset=us-ascii Content-Disposition: attachment; filename="recurse-disable-trigger.patch" diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c index 511f015a86..c8d6f78da2 100644 --- a/src/backend/commands/tablecmds.c +++ b/src/backend/commands/tablecmds.c @@ -4321,6 +4321,7 @@ ATPrepCmd(List **wqueue, Relation rel, AlterTableCmd *cmd, case AT_DisableTrigAll: case AT_DisableTrigUser: ATSimplePermissions(rel, ATT_TABLE | ATT_FOREIGN_TABLE); + ATSimpleRecursion(wqueue, rel, cmd, recurse, lockmode, context); pass = AT_PASS_MISC; break; case AT_EnableRule: /* ENABLE/DISABLE RULE variants */ diff --git a/src/backend/commands/trigger.c b/src/backend/commands/trigger.c index 3b4fbdadf4..b28b49bdfa 100644 --- a/src/backend/commands/trigger.c +++ b/src/backend/commands/trigger.c @@ -1530,27 +1530,6 @@ EnableDisableTrigger(Relation rel, const char *tgname, heap_freetuple(newtup); - /* - * When altering FOR EACH ROW triggers on a partitioned table, do - * the same on the partitions as well. - */ - if (rel->rd_rel->relkind == RELKIND_PARTITIONED_TABLE && - (TRIGGER_FOR_ROW(oldtrig->tgtype))) - { - PartitionDesc partdesc = RelationGetPartitionDesc(rel); - int i; - - for (i = 0; i < partdesc->nparts; i++) - { - Relation part; - - part = relation_open(partdesc->oids[i], lockmode); - EnableDisableTrigger(part, NameStr(oldtrig->tgname), - fires_when, skip_system, lockmode); - table_close(part, NoLock); /* keep lock till commit */ - } - } - changed = true; } --pf9I7BMVVzbSWLtt--