首页
学习
活动
专区
圈层
工具
发布

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

操作系统中的文件 数据库的本质其实就是用来存储数据的,所以免不了和文件系统、存储进行交互,万丈高楼平地起,存储一般是一个数据库的最底层,Postgres 在存储的文件管理方面也有很多的设计与抽象。...Postgres 的 VFD 作用 Postgres 数据库在运行的过程当中,可能会打开非常多的文件,比如数据表对应的文件,元数据表文件,以及一些在 SQL 运行时打开的临时文件,例如排序、哈希表所需的文件...所以有非常大的概率超过单个进程打开文件数量的限制,为了解决这个问题,Postgres 设计了 VFD(虚拟文件描述符)机制,主要是将实际的操作系统文件描述符维护到一个 LRU 缓存中,通过切换打开的方式...将 Vfd 加入到链表中,代码如下,可以看到主要是通过维护 lruMoreRecently 和 lruLessRecently 这两个指针,将当前 vfd 加入到链表的头部。...中的 VFD,即虚拟文件描述符,主要是为了能够规避操作系统中最大打开文件数的限制,采用切换打开的方式,维护了一个链表,将最近打开的文件维护到链表头部,最久未使用的文件放置到链表尾部。

55510
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Postgres 源码安装

    /data/postgres/13.2/路径下,数据库的数据存放在/data/postgres/13.2/data路径下 #### 1.创建postgres用户 ~~~bash [root@Centos.../data/ [root@Centos data]# su - postgres ~~~ #### 3.获取源码 到PostgreSQL[官方网站](https://www.postgresql.org...pg_ctl restart -m fast ~~~ #### 2.如何删除PostgreSQL数据库软件 postgres用户进入到前面解压的源码所在的路径/home/postgres/postgresql...install-world ##### b.清除之前的编译状态 就是把之前第5步执行configure之后的文件状态,恢复到configure之前的状态,然后再通过执行configure,make...因此,上述命令表示的是以postgres用户连接监听运行在本地机器上的5432的名为postgres的数据库。命令行上,并没有要求输入数据库密码,为什么?

    2.3K00

    Deepin 安装Postgres

    如果容器被删除,那么容器中 postgres 的数据也会一并被删除,所以我们要将数据保存到本机中,方便数据的备份与恢复。...docker exec -it postgres-server bash 此时已经进入了容器中的 postgres ,使用的是 bash 这个shell ,接下来我们使用命令行进入数据库中,并添加几条数据...su - postgres psql # 此时可以进入到数据库,此时会提醒我们使用 help 查看帮助命令 \l # 查看当前的所有数据库 \c postgres # 进入到 postgres 数据库中...\dt # 查看所有的表,第一次查询为空 CREATE TABLE first (id int,name char(50)); # 创建一张表 \dt # 现在可以查询到存在一张 first 表 select...删除持久化文件 对数据进行持久化后,我们可能已经备份了数据,想要删除到主机上的文件,可以执行下面的命令 在 docker 中 卷 volume 是一等公民,可以直接使用命令操作。

    3.2K20

    node.js + postgres 从注入到Getshell

    (最近你们可能会看到我发很多陈年漏洞的分析,其实这些漏洞刚出来我就想写,不过是没时间,拖延拖延,但该做的事迟早要做的,共勉) Postgres是现在用的比较多的数据库,包括我自己的博客,数据库都选择使用...Postgres,其优点我就不展开说了。...node-postgres是node中连接pg数据库的客户端,其中出现过一个代码执行漏洞,非常典型,可以拿出来讲一讲。...0x01 Postgres 协议分析 碳基体妹纸曾经分析过postgres的认证协议,显然pg的交互过程其实就是简单的TCP数据包的交互过程,文档中列出了所有数据报文。...其中,我们观察到,pg的通信,其实就是一些预定的message交换的过程。

    2.1K30

    Ora2pg 把oracle数据导入到postgres

    4、导出Oracle模式到一个PostgreSQL(7.3以后)模式中。 5、导出预定义函数、触发器、程序、包和包体。 6、导出范围和列表分区。 7、导出所有的数据或跟随一个WHERE子句。...-j | --jobs num : 设置用于发送数据到 PostgreSQL 的并发进程数量。 -J | --copies num : 设置用于从 Oracle 导出数据的并发连接数量。...5 Ora2pg 使用案例 5.1 ora2pg 数据导入到pg案例 5.1.1 编写配置案例 # vim ora2pg.conf # oracle client 安装地址 ORACLE_HOME...单表的名字 5.1.3 查看文件的大小与行数 # du -sh output.sql 79M output.sql # wc -l output.sql 542914 output.sql 5.1.4 把数据导入到...postgres中 # time psql -U postgres -d databasename -h 192.168.***.** -p 5432 -f output.sql SET SET CREATE

    4.7K40

    Ora2pg 把oracle数据导入到postgres

    4、导出Oracle模式到一个PostgreSQL(7.3以后)模式中。 5、导出预定义函数、触发器、程序、包和包体。 6、导出范围和列表分区。 7、导出所有的数据或跟随一个WHERE子句。...-j | --jobs num : 设置用于发送数据到 PostgreSQL 的并发进程数量。 -J | --copies num : 设置用于从 Oracle 导出数据的并发连接数量。...5 Ora2pg 使用案例 5.1 ora2pg 数据导入到pg案例 5.1.1 编写配置案例 # vim ora2pg.conf # oracle client 安装地址 ORACLE_HOME /...单表的名字 5.1.3 查看文件的大小与行数 # du -sh output.sql 79M output.sql # wc -l output.sql 542914 output.sql 5.1.4 把数据导入到...postgres中 # time psql -U postgres -d databasename -h 192.168.***.** -p 5432 -f output.sql SET SET CREATE

    4.4K41

    postgres分区表

    一、特性postgres分区表是数据层层面的, 相对于普通表在内部实现复杂,但是用户无感知.分区表是一种将大表拆分成多个小表的方式Hash 分区:根据特定列的哈希值将数据均匀分布到多个分区中。...这种方式适用于需要均匀分布数据的场景,能够避免某些分区过大而其他分区过小的情况。通常用于数值型或字符串型数据。List 分区:根据特定列的值将数据分到不同的分区中。...二、建表&分区语句背景是一个中间表的结果集太庞大, 但是数据是有租户隔离的, 因为基于List/Hash进行数据隔离测试Hash分区建表&分区CREATE TABLE temp ( id...temp FOR VALUES IN ('1925');-- 没有匹配到时候的默认分区CREATE TABLE temp_default PARTITION OF temp DEFAULT;三、插入数据

    56610
    领券