Re: CREATE TABLE .. PARTITION OF fails to preserve tgenabled for inherited row triggers
Justin Pryzby <pryzby@telsasoft.com>
From: Justin Pryzby <pryzby@telsasoft.com>
To: Alvaro Herrera <alvherre@alvh.no-ip.org>
Cc: Tom Lane <tgl@sss.pgh.pa.us>, pgsql-hackers@postgresql.org, Amit Langote <amitlangote09@gmail.com>
Date: 2020-10-27T17:43:18Z
Lists: pgsql-hackers
Attachments
On Wed, Oct 21, 2020 at 02:02:37PM -0300, Alvaro Herrera wrote: > On 2020-Oct-21, Justin Pryzby wrote: > > > I came up with this, which probably needs more than a little finesse. > > Hmm, there are two important changes needed on this: 1) it must not emit > CREATE lines for the child triggers; only the ALTER TABLE ONLY > <partition> lines to set disable state on the partition are needed. 2) > tgparentid does not exist prior to pg13, so you need some additional > trick to cover that case. Thanks for looking. > Also, I think the multipartition case is broken: if grandparent has > trigger enabled, parent has trigger disabled and child trigger set to > always, is that dumped correctly? I think the right way to do this is > change only the partitions that differ from the topmost partitioned > table -- not their immediate parents; and use ONLY to ensure they don't > affect downstream children. I think either way could be ok - if you assume that the trigger was disabled with ONLY, then it'd make sense to restore it with ONLY, but I think it's at least as common to ALTER TABLE [*]. It might look weird to the user if they used ALTER TABLE ONLY and the pg_dump output uses ALTER TABLE for that table, and then again for all its children (or vice versa). But it's fine as long as the state is correctly restored. There are serveral issues: - fail to preserve childs' tgenabled in CREATE TABLE PARTITION OF; - fail to preserve childs' tgenabled in pg_dump; - fail to preserve childs' comments in pg_dump; I'm going step away from this patch at least for awhile, so I'm attaching my latest in case it's useful. -- Justin
Commits
-
Fix pg_dump for disabled triggers on partitioned tables
- f0e21f2f6167 15.0 landed
- ccfc3cbb341a 11.13 landed
- cc340af33453 13.4 landed
- 5992c94dc7e4 12.8 landed
- 3c5b7c628621 14.0 landed
-
Preserve firing-on state when cloning row triggers to partitions
- fed35bd4a650 11.13 landed
- eef92de11e50 14.0 landed
- df80fa2ee504 15.0 landed
- c31516ae5b43 13.4 landed
- 7584ec1f6098 12.8 landed
-
Fix ALTER TABLE .. ENABLE/DISABLE TRIGGER recursion
- bbb927b4db9b 14.0 landed
- a795f6782fa8 11.10 landed
- 5f6463a20af1 13.1 landed
- 0e6b6f8c7192 12.5 landed
-
psql \d: Display table where trigger is defined, if inherited
- c33869cc3bfc 13.0 cited
-
Fix cloning of row triggers to sub-partitions
- 1fa846f1c9af 13.0 cited
-
Make pg_dump emit ATTACH PARTITION instead of PARTITION OF (reprise)
- 33a53130a894 12.0 cited