Обсуждение: User-defined type name begins with the underscore character (_) can be created

Поиск
Список
Период
Сортировка

User-defined type name begins with the underscore character (_) can be created

От
Pavel Golub
Дата:
Hello, pgsql-bugs.

Documentation says:
"User-defined type names cannot begin with the
underscore character (_) and can only be 62
characters long (or in general NAMEDATALEN - 2,
rather than the NAMEDATALEN - 1 characters
allowed for other names). Type names beginning
with underscore are reserved for
internally-created array type names. "

However, such SQL may be executed:

CREATE TYPE _my AS (id int4, id2 int4);

And server treats it as array type. Thus next SQL will be executed too:

CREATE TABLE my_table(
my_arr my[]
);

Checked on PostgreSQL versions (Windows XP):
8.0.6
8.1.0
8.2.0

--
With best wishes,
 Pavel                          mailto:pavel@microolap.com

Re: User-defined type name begins with the underscore character (_) can be created

От
Tom Lane
Дата:
Pavel Golub <pavel@microolap.com> writes:
> Documentation says:
> "User-defined type names cannot begin with the
> underscore character (_)

We've never actually enforced that AFAIK, so this might be considered a
documentation bug.

> CREATE TYPE _my AS (id int4, id2 int4);
>
> CREATE TABLE my_table(
> my_arr my[]
> );

You could argue that the problem there is that LookupTypeName is not
verifying that what it finds is really an array of the specified type.
We could make it look up the given name without modification and then
apply get_array_type(), but this would mean two catalog lookups not one.
Still, that might be better than possibly breaking applications that
have historically worked.

            regards, tom lane