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

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

From
Pavel Golub
Date:
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
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