1

我可以得到 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 的帮助下,我几乎完成了正确获取数组数据类型的工作,但该视图并不能帮助我获得数组数据类型的长度、精度和比例。

请让我知道我们对此的评论。

注意:我正在使用 Postgres 9.2

谢谢,拉维

4

2 回答 2

0

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

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

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

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

于 2013-10-22T20:06:05.767 回答
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=# 
于 2013-10-23T12:35:06.993 回答