如何列出PostgreSQL中的所有架构?


239

使用PostgreSQL v9.1时,如何使用SQL列出所有模式?

我期待着以下方面的事情:

SELECT something FROM pg_blah;

Answers:


257

要列出所有模式,请使用(ANSI)标准INFORMATION_SCHEMA

select schema_name
from information_schema.schemata;

手册中的更多详细信息

或者:

select nspname
from pg_catalog.pg_namespace;

手册中有关pg_catalog的更多详细信息


249

使用psql命令行时,可以使用command列出所有模式\dn


谢谢。仅具有\ dn返回的架构会很好,但是在这种情况下,我正在编写一个使用libpq / libpqxxxx连接的引导应用程序,因此我没有CLI访问权限。
斯特凡2013年

1
什么模式,即\dn列出,而不是该表\dt列出了?
汤米

8
@Tommy \dt列出用于公共架构的表。要显示所有模式使用的表,\dt *.*以及特定模式使用的表\dt schema_name.*
严重

@Tommy,模式是名称空间:您可能在不同的名称空间中使用名称相同的不同表。
eppesuig

38

连接到psql命令-> psql --u {userName} {DBName},然后可以键入以下命令来检查数据库中存在多少个模式

DBName=# \dn

另外,您可以通过以下步骤轻松检查语法-

  1. 连接数据库后,按

    DBName=# help

您将获得以下选项:

您正在使用psql(PostgreSQL的命令行界面)。
类型:\ copyright用于分发条款
\ h用于SQL命令帮助
\?通过psql命令
\ g 获得帮助,或以分号终止以执行查询
\ q退出

然后按

DBName=# \?

您将很容易获得所有选项。


9

从postgres 9.3开始,可以使用postgres在psql中获取信息命令的确切sql(例如\ d,\ du,\ dp等)的一种技巧。这就是窍门。打开一个postgres会话,然后输入命令:

begin;
\dn+

当事务仍在运行时,打开另一个postgres会话,并查询pg_stat_activity,您可以获取确切的sql。

postgres=# select query from pg_stat_activity ;
                                 query                                 
-----------------------------------------------------------------------
 SELECT n.nspname AS "Name",                                          +
   pg_catalog.pg_get_userbyid(n.nspowner) AS "Owner",                 +
   pg_catalog.array_to_string(n.nspacl, E'\n') AS "Access privileges",+
   pg_catalog.obj_description(n.oid, 'pg_namespace') AS "Description" +
 FROM pg_catalog.pg_namespace n                                       +
 WHERE n.nspname !~ '^pg_' AND n.nspname <> 'information_schema'      +
 ORDER BY 1;

12
您不需要欺骗它。刚刚跑步\set ECHO_HIDDEN on
Nick Barnes 16'9

8
或将其运行为psql -E
Evan Carroll
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.