摘要: 我们知道,在数据库中为了并发控制,少不了要使用各种各样的锁(lock)。PostgreSQL中也不例外。 在PostgreSQL中有三种级别的锁,他们的关系如下: 那么按照顺序,我们先来讨论下PostgreSQL的最底层的SpinLock。 作为PostgreSQL的最底层的锁,SpinLock比较 阅读全文
posted @ 2018-10-11 20:44 非我在 阅读(1523) 评论(1) 推荐(1) 编辑
摘要: "上文" 我们讨论了PostgreSQL的MVCC相关的基础知识以及实现机制。关于PostgreSQL中的MVCC,我们只讲了元组可见性的问题,还剩下两个问题没讲。一个是"Lost Update"问题,另一个是PostgreSQL中的序列化快照隔离机制(SSI,Serializable Snapsh 阅读全文
posted @ 2018-10-08 16:39 非我在 阅读(4088) 评论(0) 推荐(2) 编辑
摘要: PostgreSQL为开发者提供了一组丰富的工具来管理对数据的并发访问。在内部,数据一致性通过使用一种多版本模型(多版本并发控制,MVCC)来维护。这就意味着每个 SQL 语句看到的都只是一小段时间之前的数据快照(一个数据库版本),而不管底层数据的当前状态。这样可以保护语句不会看到可能由其他在相同数 阅读全文
posted @ 2018-09-04 16:59 非我在 阅读(2825) 评论(1) 推荐(4) 编辑
摘要: 在 PostgreSQL中,每一个进程都有属于自己的共享缓存(shared cache)。例如,同一个系统表在不同的进程中都有对应的Cache来缓存它的元组(对于RelCache来说缓存的是一个RelationData结构)。同一个系统表的元组可能同时被多个进程的Cache所缓存,当其中某个Cach 阅读全文
posted @ 2018-06-05 15:31 非我在 阅读(2309) 评论(3) 推荐(0) 编辑
摘要: 本文源于最近修正的一个关于psqlodbc的bug,该bug在近期的psqlodbc的git上也有人提交了修正。 关于该bug的修正代码可以看这里: "https://git.postgresql.org/gitweb/?p=psqlodbc.git;a=commit;h=85f6fade3" 说道 阅读全文
posted @ 2018-04-23 22:04 非我在 阅读(805) 评论(0) 推荐(0) 编辑
摘要: 今天我们对postmaster的以下细节进行讨论: 2.与前端的交互 2.1backend的启动和client的连接请求的认证 关于backend的启动,其函数调用栈如下: typedef struct bkend { pid_t pid; / process id of backend / lon 阅读全文
posted @ 2018-04-23 08:06 非我在 阅读(3017) 评论(1) 推荐(1) 编辑
摘要: 之前我的一些文章都是在说Postgres的一些查询相关的代码。但是对于Postgres服务端是如何启动,后台进程是如何加载,服务端在哪里以及如何监听客户端的连接都没有一个清晰的逻辑。那么今天我来说说Postgres中的 postmaster 模块的代码,试着解答这些问题。 在正式讨论之前,我先说一下 阅读全文
posted @ 2018-04-09 09:08 非我在 阅读(2902) 评论(1) 推荐(0) 编辑
摘要: 回滚 n 个 commit (增加了revert commit) git revert n commit_id 回滚到指定的commit_id(不增加commit,回滚的commit_id被删除) git reset hard commit_id 回到commit_id处,在这里可以修改在这个com 阅读全文
posted @ 2018-03-23 21:23 非我在 阅读(326) 评论(0) 推荐(0) 编辑
摘要: 5.ModifyTable节点 先看一个ModifyTable节点的例子: 你可能疑惑为啥上面的查询计划里面没有"ModifyTable"这样的字眼,下面是explain.c文件中的一段: 由此我们可以看到,对于ModifyTable节点,explain会判断是增删改中的哪一种从而作出判断。所以当在 阅读全文
posted @ 2018-02-08 16:42 非我在 阅读(1702) 评论(0) 推荐(1) 编辑
摘要: 控制节点 控制节点用于完成一些特殊的流程执行方式。由于PostgreSQL为査询语句生成二叉树状的査询计划,其中大部分节点的执行过程需要两个以内的输入和一个输出。但有一些特殊的功能为了优化的需要,会含有特殊的执行方式和输人需求(例如对于update、INSERT和DELETE,在普通的SELECT基 阅读全文
posted @ 2018-02-05 16:40 非我在 阅读(1279) 评论(1) 推荐(2) 编辑