首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
您找到你想要的搜索结果了吗?
是的
没有找到

Postgres 源码学习 2—Postgres 的 VFD 机制

操作系统中的文件 数据库的本质其实就是用来存储数据的,所以免不了和文件系统、存储进行交互,万丈高楼平地起,存储一般是一个数据库的最底层,Postgres 在存储的文件管理方面也有很多的设计与抽象。...在操作系统层面,提供了一些文件操作相关的系统调用(fopen、fclose、fsync 等),我们作为上层使用者,可以直接通过 C 语言库进行调用即可(Postgres 使用 C 语言编写)。...Postgres 的 VFD 作用 Postgres 数据库在运行的过程当中,可能会打开非常多的文件,比如数据表对应的文件,元数据表文件,以及一些在 SQL 运行时打开的临时文件,例如排序、哈希表所需的文件...VFD 的基本工作方式 Postgres 主要通过一个进程私有的数组来维护 VFD,名为 VfdCache。...通过这种方式,Postgres 可以打开远超过系统和进程限制的文件数量,是一个非常精妙的设计。

9810

Postgres 源码学习 3—Postgres 存储管理器

前面一节说到,在 Postgres 的 VFD 机制之上,我们可以避开打开文件数量的系统限制,通过 VFD 可以进行打开、读写、关闭、删除文件等操作,简单来说就是 VFD 为我们提供了一个抽象,屏蔽了操作系统文件描述符的接口...文件类型和文件块 要了解 Postgres 的存储管理,需要先对 Postgres 的表文件的组织方式、类型有一个简单的了解。...Postgres 中的表文件可能会非常大,在物理存储上会将表文件拆分为多个,每一个表文件通过 segno 来区分。...在 Postgres 的数据目录中,表文件的存储格式为 base//。...但是目前在操作系统层面,已经提供了文件系统的抽象,所以存储管理器其实已经没有存在的必要了,但是 Postgres 依然选择将其保留,主要是认为这层抽象并没有什么其他的影响。

9110

Postgres 源码学习 1—Postgres 源码编译和 debug

我使用了 Ubuntu 20.04 版本的镜像作为演示: img 使用镜像启动容器: docker run -itd --name --privileged 安装依赖 安装 Postgres 编译所需的依赖(这里是摘取了 Greenplum 的安装依赖,可能包含了一些没必要安装的,但肯定是涵盖了 Postgres 需要的依赖,所以全部安装上也没啥问题...的源代码,并进入到 postgres 代码目录中。...如果是拉取最新版本的代码,可以从 Github 上获取: git clone https://github.com/postgres/postgres.git 如果想要获取对应版本的源代码,则可以从...Postgres 官网中下载: 地址:https://www.postgresql.org/ftp/source/ Postgres 有非常多的编译选项,详情可以参考官方文档:https://www.postgresql.org

22010

renovate: 处理 Postgres 模式迁移

然而 atlas 对 Postgres 的支持并不太好,生成的 migration plan 很多时候都是破坏性的(比如 drop table 再 crate table),这根本无法在生产环境使用。...y Successfully applied migration to postgres://user@localhost:5432/hello....在过去的 4 天里,我几乎就是解决完一个细节,再解决下一个,前前后后一共发布了近 20 个平平无奇的小版本。...这些小版本无非就是支持一下 default constraint 或者解决 varchar(256)[] 解析的问题,但就是这样一个个琐碎的功能,共同构筑了目前 Renovate 还算不错的用户体验。...在 hackathon 开始时,Renovate 会何去何从我非常没底,但快速为一个很傻很天真的版本构建最基本的用户界面,并将其展示给别人时(我录了个屏发公司 hackathon 的 slack channel

68520
领券