Re: bug, ALTER TABLE call ATPostAlterTypeCleanup twice for the same relation
От | jian he |
---|---|
Тема | Re: bug, ALTER TABLE call ATPostAlterTypeCleanup twice for the same relation |
Дата | |
Msg-id | CACJufxE10Cfe6-JzPGArL01k0B_n8dacz+fvmUSp9Rcn2Wo+1g@mail.gmail.com обсуждение исходный текст |
Ответ на | Re: bug, ALTER TABLE call ATPostAlterTypeCleanup twice for the same relation (Chao Li <li.evan.chao@gmail.com>) |
Список | pgsql-hackers |
On Mon, Sep 29, 2025 at 5:21 PM Chao Li <li.evan.chao@gmail.com> wrote: > > Hi Jian, > > On Mon, Sep 29, 2025 at 3:43 PM jian he <jian.universality@gmail.com> wrote: >> >> >> please also check the attached patch. >> The idea is that if both generation expression and type are being changed, >> only call ATPostAlterTypeCleanup while the current pass is >> AT_PASS_SET_EXPRESSION. > > > I think your implementation is similar to my previous dirty fix, the main idea is to postpone the cleanup to after AT_PASS_SET_EXPRESSION. > > But I feel we don't need an extra loop to find tabs that have both ALTER TYPE and SET EXPRESSION, and do the if-else check,the logic is a bit difficult to understand. > > I am attaching my version and please see if you like it. My version just records tabs to cleanup in an array, then runsthe cleanup after the AT_PASS_SET_EXPRESSION pass. > hi. we can simply change from if (pass == AT_PASS_ALTER_TYPE || pass == AT_PASS_SET_EXPRESSION) ATPostAlterTypeCleanup(wqueue, tab, lockmode); to if (pass == AT_PASS_SET_EXPRESSION) ATPostAlterTypeCleanup(wqueue, tab, lockmode); else if (pass == AT_PASS_ALTER_TYPE && tab->subcmds[AT_PASS_SET_EXPRESSION] == NIL) ATPostAlterTypeCleanup(wqueue, tab, lockmode);
В списке pgsql-hackers по дате отправления: