当我\dt
在 psql 中执行时,我只会得到当前模式中的表列表(public
默认情况下)。
如何获取所有模式或特定模式中的所有表的列表?
当我\dt
在 psql 中执行时,我只会得到当前模式中的表列表(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 节中的规定工作,除了
.
上面提到的作为分隔符,*
它被翻译成正则表达式符号.*
,?
被翻译成.
,并且$
被逐字匹配。您可以根据需要通过编写?
for.
、(R+|)
forR*
或(R|)
for来模拟这些模式字符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';