Hi,
As documented to https://www.postgresql.org/docs/11/arrays.html#ARRAYS-DECLARATION one can create column of an array type using `<typename>[]` form.
Internally, array types get a name in the form of `_<typename>`.
This is documented https://www.postgresql.org/docs/11/sql-createtype.html#id-1.9.3.94.5.9
So -- the question:
Can a user use `_<typename>` to define a column of array type?
Is it supported?
The reason I am asking is that e.g. int4[] and _int4 behave differently.
Although they look the same, the have different pg_attribute.attndims.
I am testing on Postgres 11.2.
================================================
create table t(a int4[], b _int4);
\d t
Table "public.t"
Column | Type | Collation | Nullable | Default
--------+-----------+-----------+----------+---------
a | integer[] | | |
b | integer[] | | |
SELECT attname, attndims FROM pg_attribute att JOIN pg_class tbl ON tbl.oid = att.attrelid WHERE tbl.relname = 't';
attname | attndims
----------+----------
...
a | 1
b | 0
================================================
This has also been discussed previously in 2006 in the https://www.postgresql.org/message-id/8C5B026B51B6854CBE88121DBF097A8651DB95%40ehost010-33.exch010.intermedia.net user group thread. However, it was a while ago (so something might have changed since then) and the conclusion from that discussion wasn't fully clear to me.
Best regards,
Piotr