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 по дате отправления: