PostgreSQL查询列出所有表名?


183

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

我尝试了一个查询,例如:

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

但是此查询也返回视图。

我如何只获取表名,而不获取视图?

Answers:


307

什么查询(基于手册中的描述)?

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

4
这是最好的答案。
汤米

3
什么是表格类型?
布莱恩·布莱斯

手册中的table_type:表的类型:BASE TABLE用于持久基表(普通表类型),VIEW用于视图,FOREIGN用于外部表或LOCAL TEMPORARY用于临时表
tzachs

37

如果要数据库列表

SELECT datname FROM pg_database WHERE datistemplate = false;

如果要从所有数据库的当前pg安装中获取表列表

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

至少在Postgres 9.5中,这不是事实。我在一个群集中有3个数据库,而这只是从当前数据库返回表。
sudo

文档只说了当前的:postgresql.org/docs/9.5/static/infoschema-tables.html “ table_catalog sql_identifier包含表的数据库的名称(总是当前数据库)”
sudo

27

用所需的数据库打开postgres终端:

psql dbname (run this line in a terminal)

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

\d

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

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

\d tablename.

希望这可以帮助。


@wingedpanther如何?有一个\d选项可以列出所有表,没有索引,没有序列 ,...?
彼得·克劳斯

5
\dt不是有吗?
thoroc

11

试试这个:

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

这个作品!


我认为我们不需要table_type='BASE TABLE'。也许我错了,请您详细说明一下?
abriggs

有时对过滤当前连接的数据库很有用,并且
Diego Scaravaggi

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

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

1
pg_stat_user_tables如果track_activities被禁用,则可能不会填充。使用“官方”的API,例如pg_tables或者information_schema.table很多更好的选择。
a_horse_with_no_name 2014年


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,也可以在psql的设置中进行切换命令行由\ t(\ pset tuples_only的缩写)。例如,当使用\ g [| command]将输出管道输送到另一个命令时,这可能很有用。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.