2014-01-29 47 views
9

問題自問自答:當量的PgAdmin3「描述表」

正如許多人都知道,PostgreSQL不支持describe tabledescribe view。正如你可能從google找到的那樣,PostgreSQL使用\d+代替。

但是,如果使用PgAdmin訪問PostgreSQL(我實際上使用PgAdmin3),那麼\d+不起作用。人們做了什麼呢?

我在使用PgAdmin3中的查詢工具時想到了這個問題。我有一個「呃,呃!」當時我想看看PgAdmin3的主窗口以及該窗口左側的樹。在

<servername> 
-> <databasename> 
-> Schemas 
-> <schemaname> 
-> Tables 

是我的表, 並點擊表名顯示我的文字 非常像什麼\d+會顯示我的列表。

因此,爲了沒有發現這種情況的其他人的利益,這裏是一個答案。

+0

嚴格地說,'psql'使用'\ dt'; PostgreSQL服務器後端不支持,儘管它提供了'information_schema'視圖。 –

回答

16

PostgreSQL還支持標準SQL信息模式來檢索數據庫中對象的詳細信息。

即讓你可以查詢information_schema.columns視圖的列信息:

SELECT * 
FROM information_schema.columns 
WHERE table_name = '????'; 

檢查here有關信息架構PostgreSQL的具體細節。

1

psql's \ d命令向數據庫發送一組查詢以詢問模式,然後打印結果。

如果您希望能夠直接通過SQL提取類似信息,您可以使用'-E'psql選項來顯示這些查詢。

話雖如此,psql使用內部Postgresql目錄表,而不是標準化的'information_schema'模式(請參閱garethflowers的答案)。因此,如果您關心可移植性,或者甚至保證它將繼續從一個發行版到另一個發行版,那麼您可能應該使用information_schema。

0

和從bash外殼的直線:

psql -d "$db_name" -c ' 
    SELECT 
    ordinal_position , table_name , column_name , data_type , is_nullable 
    FROM information_schema.columns 
    WHERE 1=1 
    AND table_name = '\''my_table'\'' 
    ;' 

    # or just the col names 
    psql -d "$my_db" -t -c \ 
    "SELECT column_name FROM information_schema.columns 
    WHERE 1=1 AND table_name='my_table'"