Thread: Array Char/VarChar Size

Array Char/VarChar Size

From
dmp
Date:
Given a defined table as such:

CREATE TABLE array_types (

    data_type_id serial NOT NULL,

    decimal_array decimal(16,2)[] DEFAULT NULL,
    numeric_array numeric(10,2)[] DEFAULT NULL,
    varchar_array varchar(30)[] DEFAULT NULL,
    char_array char(30)[][] DEFAULT NULL,
    PRIMARY KEY  (data_type_id)
);

How do I obtain the precision, decimal places, or character
sizing information from the database. Notice these are array
types.

danap.

Re: Array Char/VarChar Size

From
Kris Jurka
Date:

On Wed, 27 Feb 2008, dmp wrote:

> Given a defined table as such:
>
> CREATE TABLE array_types (
>
>   data_type_id serial NOT NULL,
>     decimal_array decimal(16,2)[] DEFAULT NULL,
>   numeric_array numeric(10,2)[] DEFAULT NULL,
>   varchar_array varchar(30)[] DEFAULT NULL,
>   char_array char(30)[][] DEFAULT NULL,
>   PRIMARY KEY  (data_type_id)
> );
>
> How do I obtain the precision, decimal places, or character
> sizing information from the database. Notice these are array
> types.

Currently the driver does not return this information, but we've listed it
as an open feature request:

http://pgfoundry.org/tracker/index.php?func=detail&aid=1010248&group_id=1000224&atid=857

Kris Jurka


Re: Array Char/VarChar Size

From
dmp
Date:
Perhaps this is not the appropriate list, but is there a way to
determine this information
from the information_schema? The reason I ask is I can not seem to find
this information
there either. pg_dump does provide this information, though lacking the
ability to proper
identify multi-dimensional arrays, ex. char(30)[][] gives char(30)[].

danap.


> Currently the driver does not return this information, but we've
> listed it as an open feature request:
>
> http://pgfoundry.org/tracker/index.php?func=detail&aid=1010248&group_id=1000224&atid=857
>
> Kris Jurka



> Given a defined table as such:
>
> CREATE TABLE array_types (
>
>    data_type_id serial NOT NULL,
>      decimal_array decimal(16,2)[] DEFAULT NULL,
>    numeric_array numeric(10,2)[] DEFAULT NULL,
>    varchar_array varchar(30)[] DEFAULT NULL,
>    char_array char(30)[][] DEFAULT NULL,
>    PRIMARY KEY  (data_type_id)
> );
>
> How do I obtain the precision, decimal places, or character
> sizing information from the database. Notice these are array
> types.
>
> danap.


Re: Array Char/VarChar Size

From
Kris Jurka
Date:

On Fri, 29 Feb 2008, dmp wrote:

> Perhaps this is not the appropriate list, but is there a way to
> determine this information from the information_schema? The reason I ask
> is I can not seem to find this information there either. pg_dump does
> provide this information, though lacking the ability to proper identify
> multi-dimensional arrays, ex. char(30)[][] gives char(30)[].

Multi-dimensional array information is not stored.  Every array type may
be any number of dimensions.  The precision information is not available
in the information_schema, but it is available in the system catalog
tables.  See pg_attribute.atttypmod, but it does require some decoding.

Kris Jurka


Re: Array Char/VarChar Size

From
Tom Lane
Date:
Kris Jurka <books@ejurka.com> writes:
> Multi-dimensional array information is not stored.  Every array type may
> be any number of dimensions.  The precision information is not available
> in the information_schema, but it is available in the system catalog
> tables.  See pg_attribute.atttypmod, but it does require some decoding.

Rather than embedding knowledge of typmod encoding in client-side code,
may I suggest using the format_type function?  For example

select format_type(atttypid, atttypmod) from pg_attribute where
attrelid = 'my_table'::regclass and attname = 'my_column';

This will give you back something reasonably standardized, like
"character varying(42)[]".  You'll still need a bit of logic to
extract what you want, but it seems much less likely to break.

            regards, tom lane

Re: Array Char/VarChar Size

From
dmp
Date:
Mr. Lane,
I used your suggestion and it works nicely. From a client perspective
I would prefer to see support for this type of information from the
JDBC for longevity, robustness, and isolation purposes. Currently
the JDBC returns only NULLs.

Again thanks guys, I appreciate the help.
danap.

>Kris Jurka <books@ejurka.com> writes:
>
>
>>> Multi-dimensional array information is not stored.  Every array type may
>>> be any number of dimensions.  The precision information is not available
>>> in the information_schema, but it is available in the system catalog
>>> tables.  See pg_attribute.atttypmod, but it does require some decoding.
>>
>>
>
>Rather than embedding knowledge of typmod encoding in client-side code,
>may I suggest using the format_type function?  For example
>
>select format_type(atttypid, atttypmod) from pg_attribute where
>attrelid = 'my_table'::regclass and attname = 'my_column';
>
>This will give you back something reasonably standardized, like
>"character varying(42)[]".  You'll still need a bit of logic to
>extract what you want, but it seems much less likely to break.
>
>            regards, tom lane
>