Thread: how can I get the length of columns of a table by system tables/views

how can I get the length of columns of a table by system tables/views

From
shuaixf
Date:
For example:
CREATE TABLE tb(name varchar(32));

According to pg_class, pg_attribute, pg_type, I can get the tablename,
column name, column type
however, how to get the length of columns of a table by system tables/views?
Thanks!

--
View this message in context:
http://postgresql.1045698.n5.nabble.com/how-can-I-get-the-length-of-columns-of-a-table-by-system-tables-views-tp4778911p4778911.html
Sent from the PostgreSQL - admin mailing list archive at Nabble.com.

Re: how can I get the length of columns of a table by system tables/views

From
Raghavendra
Date:
For example:
CREATE TABLE tb(name varchar(32));

You can get this with System functions.

select pg_column_size(name) from tb;

---
Regards,
Raghavendra
EnterpriseDB Corporation



On Wed, Sep 7, 2011 at 8:50 PM, shuaixf <shuaixf@gmail.com> wrote:

According to pg_class, pg_attribute, pg_type, I can get the tablename,
column name, column type
however, how to get the length of columns of a table by system tables/views?
Thanks!

--
View this message in context: http://postgresql.1045698.n5.nabble.com/how-can-I-get-the-length-of-columns-of-a-table-by-system-tables-views-tp4778911p4778911.html
Sent from the PostgreSQL - admin mailing list archive at Nabble.com.

--
Sent via pgsql-admin mailing list (pgsql-admin@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-admin

Re: how can I get the length of columns of a table by system tables/views

From
Tom Lane
Date:
Raghavendra <raghavendra.rao@enterprisedb.com> writes:
> On Wed, Sep 7, 2011 at 8:50 PM, shuaixf <shuaixf@gmail.com> wrote:
>> According to pg_class, pg_attribute, pg_type, I can get the tablename,
>> column name, column type
>> however, how to get the length of columns of a table by system
>> tables/views?

> select pg_column_size(name) from tb;

That would provide the physical size of individual values.  I think what
the OP was after was how to get the declared length limit of a column.
That's encoded in pg_attribute.atttypmod.  Rather than hard-wiring
knowledge of the way it's encoded, it's best to rely on format_type(),
which knows the rules:

regression=# \d varchar_tbl
        Table "public.varchar_tbl"
 Column |         Type         | Modifiers
--------+----------------------+-----------
 f1     | character varying(4) |

regression=# select format_type(atttypid, atttypmod) from pg_attribute where attrelid = 'varchar_tbl'::regclass and
attname= 'f1'; 
     format_type
----------------------
 character varying(4)
(1 row)


            regards, tom lane

Re: how can I get the length of columns of a table by system tables/views

From
shuaixf
Date:
SELECT a.attname, pg_catalog.format_type(a.atttypid, a.atttypmod)
FROM pg_catalog.pg_attribute a
WHERE a.attrelid = (SELECT pg_class.oid
                    FROM pg_class INNER JOIN pg_namespace
                       ON (pg_class.relnamespace = pg_namespace.oid
                           AND lower(pg_namespace.nspname) = 'public')
                   WHERE pg_class.relname='tablename')
  AND a.attnum > 0 AND NOT a.attisdropped
ORDER BY a.attnum;

--
View this message in context:
http://postgresql.1045698.n5.nabble.com/how-can-I-get-the-length-of-columns-of-a-table-by-system-tables-views-tp4778911p4788780.html
Sent from the PostgreSQL - admin mailing list archive at Nabble.com.