我可以得到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
谢谢, 拉维
答案 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=#