237

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

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

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

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

我怎样才能只得到表名,而不是视图?

4

7 回答 7

387

这个查询怎么样(基于手册的描述)?

SELECT table_name
  FROM information_schema.tables
 WHERE table_schema='public'
   AND table_type='BASE TABLE';
于 2013-02-06T13:47:22.047 回答
42

如果你想要数据库列表

SELECT datname FROM pg_database WHERE datistemplate = false;

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

SELECT table_schema,table_name FROM information_schema.tables
ORDER BY table_schema,table_name;
于 2015-02-27T09:10:06.853 回答
32

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

psql dbname (run this line in a terminal)

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

\d

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

然后你可以试试这个按字段来描述一个表:

\d tablename.

希望这可以帮助。

于 2014-03-26T12:40:12.057 回答
15

尝试这个:

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

这个有效!

于 2018-08-21T17:54:24.790 回答
9
select 
 relname as table 
from 
 pg_stat_user_tables 
where schemaname = 'public'

select 
  tablename as table 
from 
  pg_tables  
where schemaname = 'public'
于 2014-10-13T11:36:16.127 回答
9
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 ] 将输出传递到另一个命令时,这可能很有用。

于 2019-12-27T04:06:06.907 回答
8

\dt让步怎么样psql?请参阅https://www.postgresql.org/docs/current/static/app-psql.html

于 2016-08-04T13:32:10.347 回答