列出PostgreSQL架构中的表

时间:2013-03-26 17:56:59

标签: postgresql postgresql-9.1 psql

当我在psql中执行\dt时,我只获得当前架构中的表列表(默认为public)。

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

5 个答案:

答案 0 :(得分:411)

在所有模式中:

=> \dt *.*

在特定架构中:

=> \dt public.*

可以使用regular expressions with some restrictions

\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 + |)表示R ,或(R |)表示R? $不需要作为正则表达式字符,因为模式必须与整个名称匹配,这与正则表达式的通常解释不同(换句话说,$会自动附加到您的模式)。如果您不希望锚定模式,请在开头和/或结尾写入*。请注意,在双引号内,所有正则表达式特殊字符都会失去其特殊含义并按字面​​匹配。此外,正则表达式特殊字符在运算符名称模式(即\ do的参数)中按字面匹配。

答案 1 :(得分:204)

您可以从information_schema

中选择表格
SELECT * FROM information_schema.tables 
WHERE table_schema = 'public'

答案 2 :(得分:41)

information_schema之外,可以使用pg_tables

select * from pg_tables where schemaname='public';

答案 3 :(得分:7)

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

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

$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

答案 4 :(得分:1)

如果您有兴趣在特定架构中列出所有表,我发现this answer相关:

SELECT table_schema||'.'||table_name AS full_rel_name
  FROM information_schema.tables
 WHERE table_schema = 'yourschemaname';