2013-10-22 65 views
0

我能得到的長度,精度和Postgres的數據類型,如下的規模,如何獲取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 Datatypes,但該視圖並沒有幫助我獲得Array Datatypes的長度,精度和比例。

請讓我知道我們對同樣的意見。

注:我使用的是Postgres 9.2

感謝, 拉維

+0

它是什麼,你想在實踐中做什麼? –

+0

我正在創建一個table1,列1和列2的數據類型爲char(5)和char(12)[],因此我的DDL看起來像這樣CREATE TABLE「Schema2」「Table1」( \t \t \t「Column1」CHAR(5 ), \t \t「Column2」CHAR(12)[] \t);現在我試圖從Postgres的目錄表中取回值。在哪裏我可以成功獲得char(5)的值,但不能用於字符數組char(12)[]。哪個目錄表/視圖存儲該信息.... –

回答

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=# 
+0

感謝帕希,您的查詢對於完成我的任務很有幫助。非常感謝。 –

0

您的評論跟進...你可以使用psql的識別信息。

運行PSQL與-E或--echo隱藏選項,因此它輸出隱藏系統查詢,它在後臺運行:

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

然後運行\ d yourtable(或\ d + yourtable )。它會精確地向您顯示哪些pg_catalog表包含哪些信息,包括哪些存儲數組類型的詳細信息。