当我在 psql 中执行
\dt
操作时,我仅获得当前模式中的表列表(默认为 public
)。
如何获取所有模式或特定模式中所有表的列表?
在所有模式中:
=> \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 节中的规定工作,但
除外,它被用作如上所述的分隔符,.
被转换为正则表达式符号*
,.*
为翻译为?
,以及字面匹配的.
。您可以根据需要模拟这些模式字符,只需为$
编写?
,为.
编写(R+|)
,或为R*
编写(R|)
。R?
不需要作为正则表达式字符,因为模式必须与整个名称匹配,这与正则表达式的通常解释不同(换句话说,$
会自动附加到您的模式中)。如果您不希望锚定该模式,请在开头和/或结尾写下$
。请注意,在双引号内,所有正则表达式特殊字符都会失去其特殊含义并按字面匹配。此外,正则表达式特殊字符在运算符名称模式中按字面匹配(即*
的参数)。\do
您可以从
information_schema
选择表格
SELECT * FROM information_schema.tables
WHERE table_schema = 'public'
除了
information_schema
之外,还可以使用 pg_tables
:
select * from pg_tables where schemaname='public';
对于那些将来遇到此问题的人:
如果您想查看多个模式的关系列表:
$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
如果您有兴趣列出特定模式中的所有表,我发现这个答案相关:
SELECT table_schema||'.'||table_name AS full_rel_name
FROM information_schema.tables
WHERE table_schema = 'yourschemaname';
之前的所有答案都涵盖了公共模式。但是,由于 Postgres 支持多种模式,您也可以在其他模式中进行查询,只需将您的模式名称替换为 public 即可。
例如:
select * from pg_tables where schemaname='your_own_schema_name';
这些列出了当前数据库的所有模式的所有表:
\dt *.*
\dtS *.*
这些详细列出了当前数据库所有模式的所有表:
\dt+ *.*
\dtS *.*
这些列出了当前数据库的
pg_catalog
和 public 模式的所有表:
\dtS
\dtS *
\dt *
这些详细列出了当前数据库的
pg_catalog
和 public
模式的所有表:
\dtS+
\dtS+ *
\dt+ *
这列出了当前数据库的
public
模式的所有表:
\dt
这里详细列出了当前数据库的
public
模式的所有表:
\dt+
这些列出了当前数据库的
my_schema
模式的所有表:
\dtS my_schema.*
\dt my_schema.*
这些详细列出了当前数据库的
my_schema
模式的所有表:
\dtS+ my_schema.*
\dt+ my_schema.*