列出PostgreSQL模式中的表

wrrgggsh  于 2023-06-29  发布在  PostgreSQL
关注(0)|答案(6)|浏览(153)

当我在psql中执行\dt时,我只得到当前模式中的表列表(默认情况下为public)。
如何获得所有模式或特定模式中所有表的列表?

bgibtngc

bgibtngc1#

在所有模式中:

=> \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的参数)。

p5fdfcr1

p5fdfcr12#

您可以从information_schema中选择表

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

sy5wg1nm3#

除了information_schema,还可以使用pg_tables

select * from pg_tables where schemaname='public';
avkwfej4

avkwfej44#

对于那些在未来遇到的人:
如果您希望查看多个模式的关系列表:

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

jmo0nnb35#

如果你有兴趣列出特定模式中的所有表,我发现this answer是相关的:

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

gxwragnw6#

前面的所有答案都涵盖了公共模式。但是,由于Postgres支持多个模式,因此您也可以在其他模式中进行查询,只需将您的模式名称替换为public即可。
例如:

select * from pg_tables where schemaname='your_own_schema_name';

相关问题