PostgreSQL中系统目录表的示例分析
这篇文章主要介绍了PostgreSQL中系统目录表的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。
创新互联建站是专业的吉州网站建设公司,吉州接单;提供做网站、网站建设,网页设计,网站设计,建网站,PHP网站建设等专业做网站服务;采用PHP框架,可快速的进行吉州网站开发网页制作和功能扩展;专业做搜索引擎喜爱的网站,专业的做网站团队,希望更多企业前来合作!
PostgreSQL 的system catalogs 对我们来说主要的作用有那些,这里主要的作用可以归结为,让一些数据库的事务更加的便捷和自动的处理,例如找到没有索引的表,发现数据库中的objects 之间的依赖关系,对数据库进行一些健康的检查,和信息收集的工作,这也就提供了一些数据库系统监控的解决方案和相关信息的供给。
OK 目的明确,所以学习这段知识,可以帮助我们达到什么目的我们在总结一下
1 解决DBA 的一些常见的问题的查找和系统运行中的缺陷的问题
2 对于POSTGRESQL的系统的性能和问题的监控,提供了明确的数值和指示
3 对于应用系统建立后,系统中的一些OBJECTS 之间的关联性的问题解决
书中提到,通过理解和熟悉存在在pg_catalog中的信息,来了解系统中的各个objects 如,tables , veiws ,functions indexes, foreign data wrapper (FDWs), triggers ,constratins ,rules , users , groups 等等这些信息,统称我们叫他数据库元信息。
我们以PG12为例, 新安装的PG12中 pg_catalog的objects 共有63个。
当然还有一些信息,夹杂在information_schema中
其中pg_class 是极其重要的一张表,其中存储了系统的一些object 信息,表,索引,视图,序列,物化视图,组合的类型,Toast tables 等等
而在pg_class中通过一个字母来标记,当前的object 到底属于哪个上面的类型
通过pg_class中的 relkind字段可以了解到每个object的实际的类型
这里就牵扯出另一个问题,如果这些objects 需要在pg_class中进行记录,则需要一个主键,PG中的pg_class是怎么通过主键来标记每个objects
这也就是oid信息,pg_class中的主键就是 oid, 这里就需要进行一个延展,在我知道表名,但不知道OID的情况怎么解决。下图中就引入了另一个PG的信息转换的方式 regclass
通过select 语句,我们将已经知晓的OBJECT 名字用对应的方式来体现,例如是文本,就加单引号,是数字就不需要加任何符合, 后面通过 ::regclass:: 作为中介符号,最后oid 则是你要转换后的信息的类型。
注:通过上面的操作我们掌握了一种信息转换的方式。
SELECT c.oid FROM pg_class c join pg_namespace n ON
(c.relnamespace = n.oid) WHERE relname ='表名';
当然通过其他的方式也可以查到相关的信息。
SELECT relname, case relkind when 'r' then 'table' WHEN 'v' THEN 'VIEW' END as type FROM pg_class WHERE relname like 'pg_sta%' AND relkind IN ('r','v');
同时系统中有关于表、索引、列、序列等的统计信息,通过这些统计信息也可以更深层次的了解系统的中一些情况。
下面会通过一些命令和案例,来表明怎么使用这些系统表或那些函数命令可以帮助我们或许什么样的信息。
1 终止当前所有和test数据库有关的执行的query, 例如当前需要有效的进行vacuum,所以现在需要对某些长时间无法完成的query,进行清理。
这里我们会用到 pg_stat_activity ,通过这样表可以查看当前与PG有关的连接,但实际上在测试中,通过Python 连接到数据库中,通过死循环执行一些较简单的语句,语句很快执行完毕,在pg_stat_activity中并没有展示,所以pg_stat_activity 还是比较适合较长的运行的语句的发现和分析。
SELECT pg_terminate_backend(pid) FROM pg_stat_activity WHERE datname =
current_database() AND pid <> pg_backend_pid() and usename = 'admin';
下图是死循环中的查询,在执行完这条语句后,就被终止了,因为SESSION 被切断了。 这里需要强调一点 pid <> pg_backend_pid() 是必须要添加的,防止切断系统中的关键的
例如下面画红线的位置的一些进程。
所以了解和理解系统的表,并加以利用可以解决很多我们面临的一些系统的问题。
感谢你能够认真阅读完这篇文章,希望小编分享的“PostgreSQL中系统目录表的示例分析”这篇文章对大家有帮助,同时也希望大家多多支持创新互联,关注创新互联行业资讯频道,更多相关知识等着你来学习!
分享文章:PostgreSQL中系统目录表的示例分析
文章出自:http://myzitong.com/article/ghpgjp.html