PostgreSQL查询列出所有表名?

时间:2013-02-06 13:26:19

标签: postgresql postgresql-9.2

是否有任何查询可用于列出Postgres DB中的所有表格。

我尝试了一个类似的查询:

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

但是这个查询也会返回视图。

我怎样才能只获取表名,而不是视图?

7 个答案:

答案 0 :(得分:247)

此查询的内容(基于manual的描述)?

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

答案 1 :(得分:32)

如果您想要数据库列表

SELECT datname FROM pg_database WHERE datistemplate = false;

如果您需要当前pg安装所有数据库的表列表

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

答案 2 :(得分:26)

使用您想要的数据库打开postgres终端:

psql dbname (run this line in a terminal)

然后,在postgres环境中运行此命令

\d

这将按名称描述所有表。基本上是按名称升序的表列表。

然后您可以尝试按字段描述表格:

\d tablename.

希望这有帮助。

答案 3 :(得分:6)

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

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

答案 4 :(得分:6)

\dt中仅提供psql怎么样?请参阅https://www.postgresql.org/docs/current/static/app-psql.html

答案 5 :(得分:1)

尝试一下:

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

这一个有效!

答案 6 :(得分:0)

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

对于MySQL,您需要table_schema ='dbName';对于MSSQL,则需要删除该条件。

请注意,“仅显示当前用户有权访问的那些表和视图”。另外,如果您可以访问许多数据库,并且希望将结果限制为某个数据库,则可以通过添加条件AND table_catalog ='yourDatabase'(在PostgreSQL中)来实现。

如果您还想摆脱显示行名的标题和显示行数的页脚,则可以使用命令行选项-t(仅--tuples-only的缩写)启动psql,也可以切换\ t在psql的命令行中设置(\ pset tuples_only的缩写)。例如,当使用\ g [| command]将输出管道输送到另一个命令时,这可能很有用。