不允许对系统目录进行即席更新_PostgreSQL 读书会 一期 系统目录 和 系统管理 2...

00da542a1826f2596f27b399be645f98.png

接上期PostgreSQL  读书会   一期  系统目录   1  --291页

上期讲到如何停止用户正在执行的session,这里PG 提供了不同的方式来终止。这里扩展一下为什么要停止用户的连接。

可以总结出以下原因

1  用户的查询时间较长,已经影响到正常的系统运作,例如vacuum相关的操作。

2  需要进行删除数据库的操作,但是目前需要进行处理的数据库正在被某些线程占用,所以需要清理这些连接的session

3  由于意外,应用程序大量建立与数据库的连接,并达到最大值,需要临时清理一些连接,在进行应用程序处理异常时,进行一些缓解性的操作。并释放相关的浪费的内存。

PG 提供了pg_terminate_backend(pid) 和 pg_cancel_backend(pid) 两钟方式的操作, 这两种方式最大的不同在于, pg_terminate_backend 会将应用程序与PG的连接断开,应用会报失去连接的错误,而pg_cancel_backend则仅仅停止当前的正在执行的事务,而不会将应用程序和数据库之间做一个了断。

这里举例,如果要删除一个数据库,而这个数据库一直有用户连接,即使不断使用pg_terminate_backend 进行操作,还是不能清理相关的连接。

停止test 库

UPDATE pg_database set datallowconn = 'false' WHERE datname = 'test';

64eae05b622a44a59d119a5306c868d4.png

通过设置数据库的是否允许连接的状态,来阻止新的连接,再次连接到禁止连接的数据库上就会报错。

所以一件事情,如果系统的来学习,则会发现更多的问题,更多的答案。

在上面的关于数据库连接和断开连接的事情告一段落后,下面就来到了,数据库的配置方面的事情

书中提到,如何获取PostgreSQL 的设置的参数的三种方式

1 通过postgresql.conf 配置文件来获得

2 通过select current_setting('配置的名字‘) 

3 通过show work_mem 的方式来提供

书里没有提出,此处为扩展,虽然三种方式都可以获得PG的配置值,但实际上postgresql.conf 读出是系统的未曾改变的启动后未改变初始值,如果在系统运行期间改变了可以改变的参数值,则通过postgresql.conf 是无法显示的。

修改部分系统值是可以通过 set_config 来做到的

例如

方式1 ,仅仅对当前运行的语句有效

fff54d753f6b3cbbfdd90776368e985d.png

方式2 对当前的session 有效

069ced9316068040de57bcde85e8b5b2.png

其实两个方式不同的就是 set_config 后的参数true or false ,选择false 则表明在整个session都生效。在打开一个进程,则还是和postgresql.conf 配置文件的值一致。

511d5f21847c72ea7339199cd95e8d44.png

当然书中也提示,不是所有的配置都能通过set_config 来进行调整,需要重新启动的值是不能通过  set_config 进行调整的。

fe486c3953a63ebfcfa73241a1c8e624.png

如何快速的获取postgresql中的系统的配置值,也可以通过下面的语句来做到

SELECT name, current_setting(name), source FROM pg_settings
WHERE source IN ('configuration file');

505bcdf5476005b47995e3c8fad109df.png

当然查看数据库的容量也是日常系统管理的一个重要的工作

SELECT pg_database.datname, pg_size_pretty(pg_database_size(pg_database.datname)) AS size FROM pg_database;

4a8155ea6ffb31fd99da19e040daafd0.png

SELECT tablename, pg_size_pretty(pg_total_relation_size(schemaname||'.'||tablename)) FROM pg_tables WHERE schemaname ='public';

b9e3e4449ad123a94c9b697338c4bf46.png

上面的方式有点类似于oracle 统计schema 中的表的大小,postgresql和sql server 一样,既有一个instance 下多个库的概念也有一个库下多个schema的概念, ORACLE 和 MYSQL 在这两个概念中都有缺失,这里就不扩展了。

常用的PG如何查看当前库的索引的问题

SELECT indexrelid::regclass, pg_size_pretty(pg_relation_size(indexrelid::regclass)) FROM pg_index WHERE indexrelid::regclass::text like 'idx%';

99c63d2428011fb898b7bfb8a9fecec7.png

这里需要统一索引的建立的名字的方式,就更能准确的统计所有符合条件的内存的展现和大小了。

其实开始读书会这个想法的起因是,某个抖音中读书会中提出的,知识碎片化的问题,目前大多数人接触的知识大多是碎片化的,包括抖音,或者公众号,大多都是从一个基础上,产生的内容,没有前因后果,他们假设你不必知道前因后果或者你可以自行脑补前因后果。所以就有我第一期的一段话,看似都懂,但细细的想,又什么都不会的原因可能就源于此。

本期就到这里, page 295

7cd47b241938d322958722b70e038fd3.png

20153c3cabe773eeef97e26cfcbe9b39.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值