432

当我\dt在 psql 中执行时,我只会得到当前模式中的表列表(public默认情况下)。

如何获取所有模式或特定模式中的所有表的列表?

4

5 回答 5

673

在所有模式中:

=> \dt *.*

在特定模式中:

=> \dt public.*

可以使用有一些限制的正则表达式

\dt (public|s).(s|t)
       List of relations
 Schema | Name | Type  | Owner 
--------+------+-------+-------
 public | s    | table | cpn
 public | t    | table | cpn
 s      | t    | table | cpn

高级用户可以使用诸如字符类之类的正则表达式表示法,例如 [0-9] 来匹配任何数字。所有正则表达式特殊字符都按照第 9.7.3 节中的规定工作,除了.上面提到的作为分隔符,*它被翻译成正则表达式符号.*?被翻译成.,并且$被逐字匹配。您可以根据需要通过编写?for .(R+|)forR*(R|)for来模拟这些模式字符R?$不需要作为正则表达式字符,因为模式必须匹配整个名称,这与正则表达式的通常解释不同(换句话说,$会自动附加到您的模式中)。*如果您不希望固定模式,请写在开头和/或结尾。请注意,在双引号内,所有正则表达式特殊字符都失去了它们的特殊含义,并按字面意思匹配。此外,正则表达式特殊字符在运算符名称模式(即 的参数\do)中按字面意思匹配。

于 2013-03-26T18:40:28.457 回答
320

您可以从中选择表information_schema

SELECT * FROM information_schema.tables 
WHERE table_schema = 'public'
于 2013-03-26T18:12:28.737 回答
73

或者,information_schema可以使用pg_tables

select * from pg_tables where schemaname='public';
于 2015-05-28T14:39:51.940 回答
12

对于那些将来遇到这种情况的人:

如果您想查看多个模式的关系列表:

$psql mydatabase
mydatabase=# SET search_path TO public, usa;   #schema examples
SET
mydatabase=# \dt
              List of relations
 Schema |      Name       | Type  |  Owner
--------+-----------------+-------+----------
 public | counties        | table | postgres
 public | spatial_ref_sys | table | postgres
 public | states          | table | postgres
 public | us_cities       | table | postgres
 usa    | census2010      | table | postgres
于 2018-02-01T02:10:49.997 回答
5

如果您有兴趣列出特定模式中的所有表,我发现这个答案是相关的:

SELECT table_schema||'.'||table_name AS full_rel_name
  FROM information_schema.tables
 WHERE table_schema = 'yourschemaname';
于 2021-03-29T09:22:23.130 回答