2010-12-02 74 views

回答

6

可以使用Postgres的使用以下查詢完整的描述表:

SELECT 
    a.attname as Column, 
    pg_catalog.format_type(a.atttypid, a.atttypmod) as Datatype 
    FROM 
    pg_catalog.pg_attribute a 
    WHERE 
    a.attnum > 0 
    AND NOT a.attisdropped 
    AND a.attrelid = (
    SELECT c.oid 
    FROM pg_catalog.pg_class c 
    LEFT JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace 
    WHERE c.relname ~ '^(TABLENAME)$' 
    AND pg_catalog.pg_table_is_visible(c.oid) 
) 

Tith這一點,你將檢索列名和數據類型。

也可以使用-E選項

$ psql -E 

然後簡單\d mytable將輸出使用的Postgres描述表查詢開始PSQL客戶端。它適用於每個psql describe命令。

+0

優秀的答案!我遇到了另一個問題,雖然:http://stackoverflow.com/questions/4336465/using-query-to-set-the-column-type-in​​-postgresql – David 2010-12-02 15:13:52

+2

我不認爲你需要那個正則表達式匹配,`` c.relname〜'^(TABLENAME)$'`相當於`c.relname ='TABLENAME'`。雖然很好的答案。 – 2010-12-02 18:11:20

10

有一個簡單得多在PostgreSQL的方式來獲取列的類型。

SELECT pg_typeof(col)::text FROM tbl LIMIT 1 

當然,表格必須至少包含一行。你只能得到沒有類型修飾符的基類型(如果有的話)。如果您需要,也可以使用下面的替代方法。
您也可以使用常量函數。該manual on pg_typeof()

對於空(或)表,你可以使用查詢系統目錄pg_attribute獲取列的完整列表和它們各自的類型依次爲:

SELECT attnum, attname AS column, format_type(atttypid, atttypmod) AS type 
FROM pg_attribute 
WHERE attrelid = 'myschema.mytbl'::regclass -- optionally schema-qualified 
AND NOT attisdropped 
AND attnum > 0 
ORDER BY attnum; 

手冊上format_type()object identifier typesregclass