Re: Postgres do not allow to create many tables with more than 63-symbols prefix

Поиск
Список
Период
Сортировка
От Andrey Lepikhov
Тема Re: Postgres do not allow to create many tables with more than 63-symbols prefix
Дата
Msg-id 9de21b26-64dd-d2a9-0dc5-99452a882a79@postgrespro.ru
обсуждение исходный текст
Ответ на Re: Postgres do not allow to create many tables with more than 63-symbols prefix  (Masahiko Sawada <sawada.mshk@gmail.com>)
Ответы Re: Postgres do not allow to create many tables with more than 63-symbols prefix  (Tom Lane <tgl@sss.pgh.pa.us>)
Список pgsql-hackers
On 6/27/22 06:38, Masahiko Sawada wrote:
> On Fri, Jun 24, 2022 at 2:12 PM Andrey Lepikhov
> <a.lepikhov@postgrespro.ru> wrote:
>> On 6/23/22 07:03, Masahiko Sawada wrote:
>>   > On Sat, Jun 4, 2022 at 4:03 AM Andrey Lepikhov
>>   > <a.lepikhov@postgrespro.ru> wrote:
>>   >> It is very corner case, of course. But solution is easy and short. So,
>>   >> why not to fix? - See the patch in attachment.
>>   >
>>   > While this seems to be a good improvement, I think it's not a bug.
>>   > Probably we cannot backpatch it as it will end up having type names
>>   > defined by different naming rules. I'd suggest discussing it on
>>   > -hackers.
>> Done.
> 
> Thank for updating the patch. Please register this item to the next CF
> if not yet.
Done [1].

>>   > Regarding the patch, I think we can merge makeUniqueTypeName() to
>>   > makeArrayTypeName() as there is no caller of makeUniqueTypeName() who
>>   > pass tryOriginal = true.
>> I partially agree with you. But I have one reason to leave
>> makeUniqueTypeName() separated:
>> It may be used in other codes with auto generated types. For example, I
>> think, the DefineRelation routine should choose composite type instead
>> of using the same name as the table.
> 
> Okay.
> 
> I have one comment on v2 patch:
> 
>   +   for(;;)
>       {
>   -       dest[i - 1] = '_';
>   -       strlcpy(dest + i, typeName, NAMEDATALEN - i);
>   -       if (namelen + i >= NAMEDATALEN)
>   -           truncate_identifier(dest, NAMEDATALEN, false);
>   -
>           if (!SearchSysCacheExists2(TYPENAMENSP,
>   -                                  CStringGetDatum(dest),
>   +                                  CStringGetDatum(type_name),
>                                      ObjectIdGetDatum(typeNamespace)))
>   -           return pstrdup(dest);
>   +           return type_name;
>   +
>   +       /* Previous attempt was failed. Prepare a new one. */
>   +       pfree(type_name);
>   +       snprintf(suffix, sizeof(suffix), "%d", ++pass);
>   +       type_name = makeObjectName("", typeName, suffix);
>       }
> 
>       return NULL;
> 
> I think it's better to break from the loop instead of returning from
> there. That way, we won't need "return NULL".
Agree. Done.

[1] https://commitfest.postgresql.org/38/3712/

-- 
Regards
Andrey Lepikhov
Postgres Professional
Вложения

В списке pgsql-hackers по дате отправления:

Предыдущее
От: Masahiko Sawada
Дата:
Сообщение: Re: Postgres do not allow to create many tables with more than 63-symbols prefix
Следующее
От: "Shinoda, Noriyoshi (PN Japan FSIP)"
Дата:
Сообщение: RE: PG15 beta1 fix pg_stats_ext/pg_stats_ext_exprs view manual