From: Alvaro Herrera <alvherre@alvh.no-ip.org>
To: Justin Pryzby <pryzby@telsasoft.com>
Cc: pgsql-hackers@postgresql.org, Amit Langote <amitlangote09@gmail.com>
Subject: Re: CREATE TABLE .. PARTITION OF fails to preserve tgenabled for inherited row triggers
Date: Fri, 16 Oct 2020 20:59:25 -0300
Message-ID: <20201016235925.GA29829@alvherre.pgsql> (raw)
In-Reply-To: <20201016165934.GA5479@alvherre.pgsql>
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.
Attachments:recurse-disable-trigger.patch (text/x-diff, 1.5K) downloaddiff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.cindex 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.cindex 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;
}
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Reply to all the recipients using the --to and --cc options:
reply via email
To: pgsql-hackers@postgresql.org
Cc: alvherre@alvh.no-ip.org, pryzby@telsasoft.com, amitlangote09@gmail.com
Subject: Re: CREATE TABLE .. PARTITION OF fails to preserve tgenabled for inherited row triggers
In-Reply-To: <20201016235925.GA29829@alvherre.pgsql>
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
This inbox is served by DDX for PostgreSQL; see mirroring instructions
for how to clone and mirror all data and code used for this inbox