diff options
author | Alvaro Herrera <alvherre@alvh.no-ip.org> | 2020-10-20 19:22:09 -0300 |
---|---|---|
committer | Alvaro Herrera <alvherre@alvh.no-ip.org> | 2020-10-20 19:22:09 -0300 |
commit | 5f6463a20af183db10d372f16ddeb5690a92aa1b (patch) | |
tree | d03661c41e2400838f968c412e1bd0169c880f32 /src/backend/commands/tablecmds.c | |
parent | 1f53d0b9f45521a85e85b6dcab7c15a7d8b4b973 (diff) | |
download | postgresql-5f6463a20af183db10d372f16ddeb5690a92aa1b.tar.gz postgresql-5f6463a20af183db10d372f16ddeb5690a92aa1b.zip |
Fix ALTER TABLE .. ENABLE/DISABLE TRIGGER recursion
More precisely, correctly handle the ONLY flag indicating not to
recurse. This was implemented in 86f575948c77 by recursing in
trigger.c, but that's the wrong place; use ATSimpleRecursion instead,
which behaves properly. However, because legacy inheritance has never
recursed in that situation, make sure to do that only for new-style
partitioning.
I noticed this problem while testing a fix for another bug in the
vicinity.
This has been wrong all along, so backpatch to 11.
Discussion: https://postgr.es/m/20201016235925.GA29829@alvherre.pgsql
Diffstat (limited to 'src/backend/commands/tablecmds.c')
-rw-r--r-- | src/backend/commands/tablecmds.c | 2 |
1 files changed, 2 insertions, 0 deletions
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c index 8e8c7e39585..b7e470ccc9b 100644 --- a/src/backend/commands/tablecmds.c +++ b/src/backend/commands/tablecmds.c @@ -4317,6 +4317,8 @@ ATPrepCmd(List **wqueue, Relation rel, AlterTableCmd *cmd, case AT_DisableTrigAll: case AT_DisableTrigUser: ATSimplePermissions(rel, ATT_TABLE | ATT_FOREIGN_TABLE); + if (rel->rd_rel->relkind == RELKIND_PARTITIONED_TABLE) + ATSimpleRecursion(wqueue, rel, cmd, recurse, lockmode, context); pass = AT_PASS_MISC; break; case AT_EnableRule: /* ENABLE/DISABLE RULE variants */ |