2013-02-06 94 views
106

是否有任何查詢可用於列出我的Postgres數據庫中的所有表。postgres查詢列出所有表名

我嘗試了一個查詢,如:

SELECT table_name FROM information_schema.tables 
         WHERE table_schema='public' 

但此查詢也返回了意見。

我怎樣才能得到只有表名,而不是意見?

回答

183

這個查詢是什麼(基於manual的描述)?

SELECT table_name 
    FROM information_schema.tables 
WHERE table_schema='public' 
    AND table_type='BASE TABLE'; 
+2

這是這裏最好的答案。 – Tommy

25

打開與DATABSE Postgres的終端,你想:

psql dbname (run this line in a terminal) 

然後,在Postgres的環境

\d 

這將名字描述的所有表運行此命令。基本上按名稱升序列表。

那麼你可以試試這個田野來描述一個表:

\d tablename. 

希望這有助於。

+0

@wingedpanther如何?有'\ d'選項只列出*所有表,沒有索引,沒有seq,...? –

+3

'''\ dt'''不在這裏嗎? – thoroc

4
select 
relname as table 
from 
pg_stat_user_tables 
where schemaname = 'public' 

select 
    tablename as table 
from 
    pg_tables 
where schemaname = 'public' 
+1

如果禁用了「track_activities」,則可能不會填充「pg_stat_user_tables」。使用「官方」API如「pg_tables」或「information_schema.table」是更好的選擇。 –

+0

@a_horse_with_no_name查看更新隊友:) –

25

如果你想李這樣可不行數據庫

SELECT datname FROM pg_database WHERE datistemplate = false; 

的ST如果你想從目前的PG安裝的所有數據庫的

SELECT table_schema,table_name FROM information_schema.tables 
ORDER BY table_schema,table_name; 
+0

至少在Postgres 9.5中,情況並非如此。我在一個集羣中有3個數據庫,並且這只是從當前數據庫返回表。 – sudo

+0

文檔只說明當前版本:https://www.postgresql.org/docs/9.5/static/infoschema-tables.html「table_catalog \t sql_identifier \t包含表(始終是當前數據庫)的數據庫的名稱」 – sudo