我期望的方式大致如下:
SELECT something FROM pg_blah;
#1 楼
要列出所有模式,请使用(ANSI)标准INFORMATION_SCHEMAselect schema_name
from information_schema.schemata;
手册中的更多详细信息
或者:
/>
select nspname
from pg_catalog.pg_namespace;
手册中有关pg_catalog的更多详细信息
#2 楼
使用psql
命令行时,可以使用命令\dn
列出所有架构。#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
评论
谢谢。仅具有\ 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