
Postgresql 之 模式管理与psql使用的小技巧
发布日期:2021-05-08 12:26:57
浏览次数:23
分类:精选文章
本文共 1815 字,大约阅读时间需要 6 分钟。
今天同事问了个问题:postgresql模式创建了会存到哪个系统表中?
这个问题一开始让我有点摸不着头脑。通常情况下,可以通过元命令查看模式等信息。具体来说,有一个常用的元命令可以用来列出数据库中的所有模式:\dn[S+] [PATTERN]
通过使用这个元命令,我可以列出数据库中所有的模式信息。接下来,我参考了PostgreSQL的官方文档,发现模式的相关信息主要存储在pg_namespace
这个系统表中。这个系统表的作用是存储数据库中的所有命名空间信息,也就是模式名称。
为了更直观地理解pg_namespace
的作用,我决定执行一个查询,查看当前数据库中各个模式的详细信息。通过以下命令,我可以获取到模式名称、模式的拥有者以及模式的访问权限等信息:
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 | highgo | highgo=UC/highgo/+ | HighGo Database catalog schema |
information_schema | highgo | highgo=UC/highgo/+ | |
oracle_catalog | highgo | highgo=UC/highgo/+ | HighGo Database catalog schema (Oracle compatibility) |
pg_catalog | highgo | highgo=UC/highgo/+ | system catalog schema |
pg_temp_1 | highgo | reserved schema for TOAST tables | |
pg_toast | highgo | ||
pg_toast_temp_1 | highgo | ||
public | highgo | highgo=UC/highgo/+ | standard public schema |
从上述结果可以看出,模式的信息确实存储在pg_namespace
系统表中。这表明PostgreSQL使用了命名空间的概念来管理数据库中的模式,这与其他关系型数据库有一些不同。
在实际操作中,我还记得一种通过psql命令查看元命令执行后门的方法。具体来说,可以通过设置参数来打印出psql中以\
开头的命令执行的实际SQL语句。以下是详细的操作方法:
psql -E --参数,可以把psql中各种以\开头的命令执行的实际SQL打印出来。\set ECHO_HIDDEN on|off --打开|关闭 命令实际执行的SQL,和-E类似。
在使用了上述命令后,再次执行\dnS+
查看模式信息时,我发现psql会打印出实际执行的SQL语句。例如:
highgo=# \set ECHO_HIDDEN onhighgo=# \dnS+highgo=# 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;
通过这种方式,我可以清晰地看到元命令实际执行的SQL语句,从而更好地理解数据库的内部工作原理。
总结来说,PostgreSQL模式创建后会存储在pg_namespace
系统表中。了解这一点对于数据库管理和优化非常有帮助。通过上述方法,我不仅解决了同事的问题,还学会了一些实用的数据库管理技巧。
发表评论
最新留言
不错!
[***.144.177.141]2025年03月21日 02时55分46秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
SQLServer 查看耗时较多的SQL语句(转)
2019-03-06
【计算机网络】应用层
2019-03-06
【Markdown】公式指导手册
2019-03-06
【Maven】POM基本概念
2019-03-06
【Java思考】Java 中的实参与形参之间的传递到底是值传递还是引用传递呢?
2019-03-06
【设计模式】单例模式
2019-03-06
【SpringCloud】Hystrix熔断器
2019-03-06
【SpringCloud】Gateway新一代网关
2019-03-06
【Linux】2.3 Linux目录结构
2019-03-06
java.util.Optional学习笔记
2019-03-06
远程触发Jenkins的Pipeline任务的并发问题处理
2019-03-06
CoProcessFunction实战三部曲之二:状态处理
2019-03-06
jackson学习之七:常用Field注解
2019-03-06
jackson学习之八:常用方法注解
2019-03-06
Web应用程序并发问题处理的一点小经验
2019-03-06
asp.net core的授权过滤器中获取action上的Attribute
2019-03-06
entity framework core在独立类库下执行迁移操作
2019-03-06
Asp.Net Core 2.1+的视图缓存(响应缓存)
2019-03-06
服务器开发- Asp.Net Core中的websocket,并封装一个简单的中间件
2019-03-06
没花一分钱的我竟然收到的JetBrains IDEA官方免费赠送一年的Licence
2019-03-06