Thread: Size of varchar in an array

Size of varchar in an array

From
RW Shore
Date:
I'm using the following type definition:
create type typedef.BASIC_PEDIGREE as (
        DATE_ADDED TIMESTAMP,
        DESCRIPTION VARCHAR(128) [10]
)\c

I understand that PostgreSQL doesn't enforce the array length [10]. However, I'd like to write an application that can retrieve this length AND the size of the varchar that makes up the array. I can't find these values anyplace in the various system catalogs or views. Does PostgreSQL keep this information someplace and if so where? If there's no way to retrieve (say) the max size of the varchar, does this mean that PostgreSQL does not enforce the max size of this field as well as not enforcing the array bounds?

Re: Size of varchar in an array

From
Dmitriy Igrishin
Date:
Hey,

2011/2/8 RW Shore <rws228@gmail.com>
I'm using the following type definition:
create type typedef.BASIC_PEDIGREE as (
        DATE_ADDED TIMESTAMP,
        DESCRIPTION VARCHAR(128) [10]
)\c

I understand that PostgreSQL doesn't enforce the array length [10]. However, I'd like to write an application that can retrieve this length AND the size of the varchar that makes up the array. I can't find these values anyplace in the various system catalogs or views. Does PostgreSQL keep this information someplace and if so where? If there's no way to retrieve (say) the max size of the varchar, does this mean that PostgreSQL does not enforce the max size of this field as well as not enforcing the array bounds?
I am not sure that Postgres keeps array size limits since, according to
http://www.postgresql.org/docs/9.0/static/arrays.html#ARRAYS-DECLARATION
"... current implementation ignores any supplied array size limits ..."
But it is possible to get maximum length of varchar:

SELECT atttypmod - 4 FROM pg_attribute
  WHERE attrelid = 'typedef.BASIC_PEDIGREE'::regclass
  AND attname = 'DESCRIPTION';

Please note that 4 is an integer which represents length.


--
// Dmitriy.