PostgreSQL USE plpythonu get Linux FileSystem usage
背景 PostgreSQL数据库表空间和目录一一对应, 目录有多少剩余空间, 代表表空间的剩余空间. 但是作为数据库的使用者, 可能没有操作系统的权限去查看目录有多少空间, 那么如何才能做到在数据库中获取文件系统的剩余空间呢? 比较简单的做法是使用plpythonu语言, 如下 : 查看系统安装了哪些语言h...
背景 PostgreSQL数据库表空间和目录一一对应, 目录有多少剩余空间, 代表表空间的剩余空间. 但是作为数据库的使用者, 可能没有操作系统的权限去查看目录有多少空间, 那么如何才能做到在数据库中获取文件系统的剩余空间呢? 比较简单的做法是使用plpythonu语言, 如下 : 查看系统安装了哪些语言h...
背景 以前写过一篇关于使用pageinspect和pgstattuple来精确计算数据库对象膨胀量的文章. 《PostgreSQL 如何精确计算表膨胀(fsm,数据块layout讲解) - PostgreSQL table exactly bloat monitor use freespace map data...
背景 数据库中一般可以使用视图来规避用户的访问数据的范围, 但是要注意, 即使使用了视图, 也不一定能规避访问. 例如带where条件的视图就有可能被攻击者利用执行树先执行成本低后执行成本高的规则, 使用低成本函数的raise窃取本来不应该看到的信息. 正文 举例如下 : 创建测试表, 插入测试数据. d...
背景 对PostgreSQL数据库有一定了解的朋友都知道PostgreSQL的UPDATE, DELETE操作是通过新增tuple版本提供高并发处理的. 这样带来一个问题是需要经常vacuum 表, 回收老版本占用的存储空间. 只有回收的空间才能被重复利用, 如果回收不及时将会造成表的膨胀效应. 那么怎么知道数...
背景 群里一位兄弟问到的关于导出bytea字段的问题, 例如它在数据库中使用bytea存储了pdf, text文档等. 需求是导出这类文件. 使用lo_export可以导出. 测试如下 : 1. 创建测试表. digoal=# create table bytea_test(id int, info by...
背景 锁在数据库中的使用频率非常高. 数据库的并发能力除了和它的并发控制机制有关, 还和数据库的锁粒度控制息息相关, 粒度越细, 冲突范围就越小, 并发能力就越强. 以PostgreSQL 9.3为例, 它支持的表锁如下, X表示这两种锁会发生冲突 : https://www.postgresql.org/d...
背景 本文介绍一下PostgreSQL数据库中多个会话的锁等待场景. 通过这个场景的介绍, 让大家了解一下PostgreSQL 9.3 引入的lock_timeout潜在用意之一. 场景介绍 : 最下面是一个时间线, SESSION A是一个长事务, 并且它持有的锁与接下来的SESSION B有冲突....
背景 在PostgreSQL 9.1以及以下版本中扩展字段长度时, 需要rewrite table. 如果是大表, 这个操作是比较费时的, 索引很多的话时间还会拉长. 而实际上扩长度理论上是不需要rewrite table的,只需要修改元数据即可。 9.2开始,扩字段不需要rewrite table了。 我...
背景 前一个章节介绍了使用bucardo提供的check_postgres脚本和nagios来监控数据库. 本文主要介绍如何编写自定义监控脚本. 在编写自定义脚本前首先要搞清楚nagios的判断标准. 1. 脚本的返回值 nagios根据脚本返回值来输出该监控服务的状态. 返回值和状态对应关系如下. 0...
背景 本例要介绍一下结合nagios使用check_postgres监控数据库的配置. 7. 配置被监控机 7.1 修改本地执行监控命令的用户和组, 因为在监控中会涉及数据库表空间文件系统等监控, 而这些目录可能是700权限的. 所以尽量使用postgres的启动用户. 如下 : [root@db-172-...