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

我期望的方式大致如下:

SELECT something FROM pg_blah;


#1 楼

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

select schema_name
from information_schema.schemata;


手册中的更多详细信息

或者:

/>
select nspname
from pg_catalog.pg_namespace;


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

#2 楼

使用psql命令行时,可以使用命令\dn列出所有架构。

评论


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

–Stéphane
13年4月15日在20:03

\ dn列出的模式与\ dt列出的表相反是什么?

–汤米(Tommy)
16-4-29在15:29



@Tommy \ dt列出公共模式的表。要显示所有模式的表,请使用\ dt *。*,对于特定模式,请使用\ dt schema_name。*。

–严重
17年11月22日在6:34



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

–eppesuig
17年11月30日在8:48

#3 楼

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

/>否则,您可以按照以下步骤轻松检查语法-



连接数据库后,按

DBName=# \dn



您将获得以下选项:


您正在使用psql,这是PostgreSQL的命令行界面。
类型:\ copyright以进行分发条款
\ h获得有关SQL命令的帮助
\?获取有关psql命令的帮助
\ g或以分号终止以执行查询
\ q退出


然后按

DBName=# help


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

#4 楼

从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;


评论


您不需要欺骗它;只需在\ set ECHO_HIDDEN上运行

–尼克·巴恩斯(Nick Barnes)
16-09-11的1:22

或将其作为psql -E运行

–埃文·卡洛尔(Evan Carroll)
16/12/22在17:46