PostgreSQL 读书会 一期 系统目录表 1

最近经历了一些事情,貌似也更深层的懂得了一些之前就“懂得”的道理,也理解了之前一些不能理解的人和事。最近也反思之前所做的一切,其实都和爱有关,乔布斯曾经说过,如果你爱他,你能更深层次的切入,因为任何一件事情如果想深层次的理解,都和你爱不爱他有关,越往深层次去做,越枯燥,越难受,只有你爱了他,才能继续走下去。  这也是为什么大部分“混社会”的人都只能叫,从业者,而不是专家的原因之一吧。

所以从今天开始,将通过读一些PG的书继续,之前的一些东西的知识碎片化严重,这就造成了,看似什么都懂,但细致的问,内部虚弱的原因。

今天的主题是postgresql  系统目录表,并通过书中的内容尽量的展开相关的延展。延展和自我加工的东西将通过加粗表示, 关于是哪本书不重要,所读的书也会根据相关情况不断变化.

———————————————————————————————

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() 是必须要添加的,防止切断系统中的关键的

例如下面画红线的位置的一些进程。

所以了解和理解系统的表,并加以利用可以解决很多我们面临的一些系统的问题。

未完待......  2    目前页数:291页

相关的书籍,可以在以下群里获得电子版

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章