列出PostgreSQL模式中的表


329

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

如何获得所有架构或特定架构中所有表的列表?

Answers:


505

在所有架构中:

=> \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+|)for R*(R|)for 来模拟这些模式字符R?$不需要作为正则表达式字符,因为该模式必须与整个名称匹配,这与常规对正则表达式的解释不同(换句话说,$会自动添加到您的图案中)。*如果您不希望锚定图案,请在开头和/或结尾处写下。请注意,在双引号中,所有正则表达式特殊字符都会失去其特殊含义,并且会在字面上进行匹配。同样,正则表达式特殊字符在运算符名称模式(即的参数\do)中按字面值进行匹配。


6
简直\dt等于\dt public.*,对吗?
冷冻火焰

例如,在特定模式中的两个特定表怎么样?喜欢\dt public.user_info, public.user_scope吗?
James M. Lay 2015年

没关系,只需\dt public.a; \dt public.b;一行即可完成。
James M. Lay 2015年

如果\ dt仅提供“公共”表,则通过正则表达式不会再期望任何其他内容了
。– mehmet

1
@FrozenFlame不是!默认情况下,它表明无论是在你的search_path,并且默认"$user", public.*。因此,set search_path=s; \dt将列出架构中的所有表s
Lukas Juhrich

257

您可以从中选择表格 information_schema

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

6
如果您的界面不支持快捷方式,则非常有用。谢谢。
马特·班纳特

1
这也很好,因为您可以执行以下操作:从information_schema.tables中选择table_schema,table_name,其中table_name如'%whatever%'; 如果您需要知道表位于哪个模式。不确定是否可以使用\ dt
Josh Brown

2
谢谢,它可以在Amazon Redshift上使用,而\ dt(可接受的答案)不能使用。
Carlos2W 2015年

2
这是最普遍有用的答案。information_schema是在SQL标准中定义的,并且可在大多数符合条件的数据库中使用
Davos


8

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

如果您想查看几种模式的关系列表:

$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
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.