Recent Posts

PostgreSQL 末尾数据块损坏(如pg_type pg_attribute) case

2 minute read

背景 某些用户遇到的一些问题,报读数据块错误。 ERROR: colud not read block 15 in file "base/16386/12741": read only 0 of 8192 bytes 大概的意识是,第15个数据块,没有正确的读出数据,数据为0字节。 第一反应是数据块坏...

PostgreSQL create extension with schema pg_catalog的权限异常case

less than 1 minute read

背景 pg_catalog这个schema是PostgreSQL默认的元数据schema,所有的元数据都在这里. 另一方面,pg_catalog这个schema默认就在搜索路径search_path里面,并且是删除不掉的,而且它的优先级排在所有schema的前面。 比如有两个重名的pg_class分别在这两个...

PostgreSQL 10.0 preview 功能增强 - 回滚范围可精细控制(事务、语句级)

3 minute read

背景 数据库的原子操作单位是事务,那么在一个事务中的SQL,正常情况下,应该是这样的:要么全部提交,要么全部回滚。 为了保证持久性,数据库还有一个概念,事务日志,每当事务提交时,都需要确保REDO持久化(REDO的写IO会比较多,IO延迟直接关系到tps吞吐量,特别是小事务)。 因此,有些业务,为了提高整体的...

PostgreSQL update tbl1 from tbl2 一对多的注意事项(到底匹配哪条)

1 minute read

背景 首先A表和B表需要有关联的列, 关联之后A表和B表应该是多对一或者一对一的关系, 一对一的话,很好理解。 如果是一对多会怎么样呢? 任何数据库都会给你一个不确定的答案(与执行计划数据的扫描方法有关) 测试如下 : sar=> create table a (id int primary key,...

PostgreSQL 10.0 preview 多核并行增强 - 控制集群并行度

2 minute read

背景 PostgreSQL 9.6引入多核并行,一条SQL可以使用多个CPU核,提升SQL性能。 但是多核并行一定不要滥用,因为CPU资源有限,如果单个QUERY把CPU都用光了,其他QUERY就会因为缺乏CPU资源造成性能抖动。 9.6刚出来的时候,可以控制单个gather的并行度,比如全表扫描,扫描节点算...