PostgreSQL基础教程:psql使用小技巧
最新学讯:近期OCP认证正在报名中,因考试人员较多请尽快报名获取最近考试时间,报名费用请联系在线老师,甲骨文官方认证,报名从速!
我要咨询PostgreSQL模式创建了会存到哪个系统表中?一般的可以通过元命令查看模式等信息,参考命令如下:
通过以下元命令可以列出所有模式
\dn[S+] [PATTERN]
进而翻阅资料定位到系统表pg_namespace,参阅手册关于该系统表的描述如下:
pg_namespace:该系统表存储名字空间(模式)。
名字类型引用描述
nspnamename
名字空间的名称。
nspowneroidpg_authid.oid名字空间的所有者
nspaclaclitem[]
访问权限。
见如下应用示例:
#查看当前数据库public模式的创建者的名称。
postgres=
# SELECT nspname,rolname FROM pg_namespace n, pg_authid a WHERE nspname = 'public' AND nspowner = a.oid;
nspname | rolname
---------+---------
public | postgres
(1 行记录)
这里有个名字空间的概念,对比其它关系数据库比较新颖,通过以上示例可以确定是名字空间即为模式名。
本文的重点在这里:后来联想到元命令的执行可以通过设置,打印出调用执行的sql语句
两种方法如下:
psql -E 参数,可以把psql中各种以\开头的命令执行的实际SQL打印出来。
\set ECHO_HIDDEN on|off 打开|关闭 命令实际执行的SQL,和-E类似。
设置后再次调用元命令\dnS+查看模式信息 ,显示如下:
postgres=
# \set ECHO_HIDDEN on
postgres=
# \dnS+
********* 查询 **********
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
ORDER BY 1;
**************************
架构模式列表
名称 | 拥有者 | 存取权限 | 描述
--------------------+--------+------------------+------------------------------------------------------
hgdb_catalog | postgres | postgres=UC/postgres+| postgres Database catalog schema
| | =U/postgres |
information_schema | postgres | postgres=UC/postgres+|
| | =U/postgres |
Oracle_catalog | postgres | postgres=UC/postgres+| postgres Database catalog schema(Oracle compatibility)
| | =U/postgres |
pg_catalog | postgres | postgres=UC/postgres+|
system
catalog schema
| | =U/postgres |
pg_temp_1 | postgres | |
pg_toast | postgres | | reserved schema
for
TOAST tables
pg_toast_temp_1 | postgres | |
public | postgres | postgres=UC/postgres+| standard public schema
| | =UC/postgres |
(8 行记录)
可以看到元命令调用的sql访问的系统表正是pg_catalog.pg_namespace,从而验证了模式创建后存放在了此系统表中。
重要的是,通过此种方法可以获取到其它元命令执行的sql 从而获取更多数据库管理信息。