列出PostgreSQL中的所有表information_schema


200

在PostgreSQL的information_schema中列出所有表的最佳方法是什么?

需要说明的是:我正在使用一个空的数据库(我没有添加任何自己的表),但是我想查看information_schema结构中的每个表。

Answers:


276

您应该能够运行select * from information_schema.tables以获取由Postgres管理的特定数据库的每个表的列表。

您还可以添加一个where table_schema = 'information_schema'以仅查看信息模式中的表。


4
谢谢,我刚试过:/ dt(星号)。(星号)有什么不同吗?
littleK 2010年

我对/ dt(星号)。(星号)一无所知,对不起。我只是在postgres中运行了select查询,它列出了其中所有表的信息。尝试运行select语句(在空白数据库上),然后查看返回的内容。
RodeoClown

尝试上述命令将在information_schema中列出以下表:sql_features,sql_implementation_info,sql_languages,sql_packages,sql_parts,sql_sizing,sql_sizing_profiles .....这些表与information_schema.tables中的表有什么区别?
littleK 2010年

2
您列出的所有表(通过/ dt命令)都提供有关数据库的元信息。列出的每个表都显示不同的信息。因此,例如,information_schema.tables表列出了数据库中的所有表及其属性(例如能够查看它是表还是视图,名称是什么以及其他类似信息)。information_schema.sql_features表将显示在数据库上启用了哪些功能(因此,我可以看到我的数据库支持嵌入式C以及直接SQL)。
RodeoClown

1
您可以在dt命令列出的每个表上运行select *-它刚刚向您显示了包含数据库中元数据的表的列表。
RodeoClown 2010年

112

要列出您的表,请使用:

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

它只会列出您创建的表。


您未创建但拥有访问权限的表又如何呢?
2013年

4
这只会显示公共模式中的表。您可以在其他架构中创建表。
Joe Van Dyk

同样,这也无法区分表和视图。
jayarjo,

44
\dt information_schema.

从psql内部,应该没问题。


14

在交互式psql会话中时,“ \ z”命令也是列出表的好方法。

例如。

# psql -d mcdb -U admin -p 5555
mcdb=# /z
                           Access privileges for database "mcdb"
 Schema |              Name              |   Type   |           Access privileges
--------+--------------------------------+----------+---------------------------------------
 public | activities                     | table    |
 public | activities_id_seq              | sequence |
 public | activities_users_mapping       | table    |
[..]
 public | v_schedules_2                  | view     | {admin=arwdxt/admin,viewuser=r/admin}
 public | v_systems                      | view     |
 public | vapp_backups                   | table    |
 public | vm_client                      | table    |
 public | vm_datastore                   | table    |
 public | vmentity_hle_map               | table    |
(148 rows)

1
这不会列出除public之外的其他模式中的表。
肯尼·埃维特

10

您也可以使用

select * from pg_tables where schemaname = 'information_schema'

通常,pg *表允许您查看数据库中的所有内容,而不受权限的限制(当然,如果您有权访问这些表)。


9

对于'xxx'postgresql中的私有模式:

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

没有table_type = 'BASE TABLE',您将列出表和视图


8

1.从information_schema.tables中获取所有表和视图,包括information_schema和pg_catalog。

select * from information_schema.tables

2.获取表和视图属于特定架构

select * from information_schema.tables
    where table_schema not in ('information_schema', 'pg_catalog')

3.仅获取表(几乎\ dt)

select * from information_schema.tables
    where table_schema not in ('information_schema', 'pg_catalog') and
    table_type = 'BASE TABLE'

如果不按table_type进行过滤,则会得到各种各样的对象,例如表和视图混合在一起。
russellhoff

到底where table_schema not in ('information_schema', 'pg_catalog')是为了什么?
jayarjo,

1

如果您想要快速而肮脏的单行查询:

select * from information_schema.tables

您可以直接在查询工具中运行它,而不必打开psql。

(其他帖子建议使用更具体的information_schema查询,但作为一个新手,我发现此单行查询可帮助我掌握表格)

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.