如何在Postgres中获取数组数据类型的长度?

时间:2013-10-22 08:06:25

标签: postgresql

我可以得到Postgres数据类型的长度,精度和比例,如下所示,

  SELECT c.column_name, c.data_type, c.character_maximum_length, c.numeric_precision
  c.numeric_scale, e.data_type AS element_type 
  FROM information_schema.columns c  
  LEFT JOIN information_schema.element_types e 
  ON ((c.table_catalog, c.table_schema, c.table_name, 'TABLE', c.dtd_identifier) = 
  (e.object_catalog, e.object_schema, e.object_name, e.object_type, 
  e.collection_type_identifier)) 

   WHERE c.table_schema ='Schema' AND c.table_name ='Table'

但有些我怎么也得不到所有数组数据类型的长度,精度和比例,如CHAR [],BIT VARYING [],VARCHAR []等等。

我在使用element_types帮助正确获取Array数据类型的过程中,但是这个视图无法帮助我获得数组数据类型的长度,精度和比例。

请让我知道我们的评论。

注意:我使用的是Postgres 9.2

谢谢, 拉维

2 个答案:

答案 0 :(得分:0)

跟进您的评论......您可以使用psql识别此信息。

使用-E或--echo-hidden选项运行psql,因此它输出它在后台运行的隐藏系统查询:

http://www.postgresql.org/docs/current/static/app-psql.html

然后运行\ d yourtable(或\ d + yourtable)。它会精确地向您显示哪些pg_catalog表包含哪些信息,包括存储数组类型详细信息的信息。

答案 1 :(得分:0)

我试过这个,它对我有用

mickey=# CREATE TABLE Table1 ( Column1 CHAR(5), Column2 CHAR(12)[ ] );
CREATE TABLE
mickey=# \d table1

Table "public.table1"
 Column  |      Type       | Modifiers 
---------+-----------------+-----------
 column1 | character(5)    | 
 column2 | character(12)[] | 

mickey=# SELECT 
col_attr.attname as "ColumnName", 
pg_catalog.format_type(col_attr.atttypid, col_attr.atttypmod) as "DataType" 
FROM pg_catalog.pg_attribute col_attr 
WHERE 
col_attr.attnum > 0 AND NOT col_attr.attisdropped 
AND col_attr.attrelid = ( SELECT cls.oid FROM pg_catalog.pg_class cls LEFT JOIN pg_catalog.pg_namespace ns ON ns.oid = cls.relnamespace WHERE cls.relname = 'table1');

 ColumnName |    DataType     
------------+-----------------
 column1    | character(5)
 column2    | character(12)[]
(2 rows)

mickey=#