教学文章
Technology Exchange
热门课程
400电话

免费咨询热线
400-090-9964

教学文章

PostgreSQL基础教程:psql使用小技巧

时间:2020-06-03 来源:

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 从而获取更多数据库管理信息。

版权所有@北京神脑资讯技术有限公司(CUUG,中国UNIX用户协会) Copyright ALL Rights Reserved 京ICP备11008061号-1

CUUG旗下网站:www.cuug.com.cn www.cuug.com oracle.cuug.com bbs.cuug.com www.cuug.net

电话:010-59426307 010-59426319 邮政编码:100089

地址:北京市海淀区北清路164号28-38号院