Обсуждение: [BUGS] BUG #14521: pg_attribute.attndims = 0 for array column
The following bug has been logged on the website: Bug reference: 14521 Logged by: Krzysztof Heim Email address: krzysztof.heim@gmail.com PostgreSQL version: 9.6.1 Operating system: Ubuntu 16.04 Description: Hello, I have base table A with column type integer array. I also have table B derived from table A. When I query pg_attribute for table A, attndims shows 1 (correct), when I do same query for table B - attndims shows 0 for same column. Is it a bug, or it's desired behavior (since it's a derived column). I checked documentation, and it does not say anything about behavior in case of derived - just says if attndims is > 0 you can assume it's array. Thanks -- Sent via pgsql-bugs mailing list (pgsql-bugs@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-bugs
krzysztof.heim@gmail.com writes:
> I have base table A with column type integer array.
> I also have table B derived from table A.
> When I query pg_attribute for table A, attndims shows 1 (correct), when I do
> same query for table B - attndims shows 0 for same column.
> Is it a bug, or it's desired behavior (since it's a derived column).
We don't really care. attndims is a historical leftover and should never
be relied on for any semantically significant purpose.
TBH, my inclination would be to remove the column altogether rather than
"fix" this.
regards, tom lane
--
Sent via pgsql-bugs mailing list (pgsql-bugs@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-bugs
Krzysztof Heim <krzysztof.heim@gmail.com> writes:
> If I may ask, what is then the best way of checking if column is array.
The standard way for C code is to use this macro from lsyscache.h:
#define type_is_array(typid) (get_element_type(typid) != InvalidOid)
or depending on what you're doing, you might want these semantics:
/* type_is_array_domain accepts both plain arrays and domains over arrays */
#define type_is_array_domain(typid) (get_base_element_type(typid) != InvalidOid)
or then again, you might just want to check if the type has nonzero
typelem --- that would be the appropriate thing if you want to see
whether the type is subscriptable.
regards, tom lane
--
Sent via pgsql-bugs mailing list (pgsql-bugs@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-bugs