home mkdir posrgres chown -R postgres postgres/ #切换postgres用户 su - posrgres #执行备份 pg_dumpall -U postgres #上传备份文件到上一步的存放位置(上传过程省略) mv u_postgres.backup postgres/ #修改权限 chown -R postgres postgres/ 使用psql还原 # 切换用户 su - postgres #切换数据备份目录 cd /home/postgres/ #执行恢复(忽略错误,"postgres"内置角色原因) psql -U postgres -f u_postgres.backup #执行恢复(遇到错误停止,不建议) #psql -U postgres --set ON_ERROR_STOP=on -f u_postgres.backup 常见问题及解决办法 权限过大问题 迁移目标目录权限过大 pgdata chown 700 pgdata #可切换postgres 测试读写权限
#host replication postgres 127.0.0.1/32 md5 #host replication postgres
操作系统中的文件 数据库的本质其实就是用来存储数据的,所以免不了和文件系统、存储进行交互,万丈高楼平地起,存储一般是一个数据库的最底层,Postgres 在存储的文件管理方面也有很多的设计与抽象。 在操作系统层面,提供了一些文件操作相关的系统调用(fopen、fclose、fsync 等),我们作为上层使用者,可以直接通过 C 语言库进行调用即可(Postgres 使用 C 语言编写)。 Postgres 的 VFD 作用 Postgres 数据库在运行的过程当中,可能会打开非常多的文件,比如数据表对应的文件,元数据表文件,以及一些在 SQL 运行时打开的临时文件,例如排序、哈希表所需的文件 VFD 的基本工作方式 Postgres 主要通过一个进程私有的数组来维护 VFD,名为 VfdCache。 通过这种方式,Postgres 可以打开远超过系统和进程限制的文件数量,是一个非常精妙的设计。
su <username> 安装依赖 安装 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 pg_ctl -D pg-data start 启动之后,可以查看 postgres 的进程状态。
前面一节说到,在 Postgres 的 VFD 机制之上,我们可以避开打开文件数量的系统限制,通过 VFD 可以进行打开、读写、关闭、删除文件等操作,简单来说就是 VFD 为我们提供了一个抽象,屏蔽了操作系统文件描述符的接口 文件类型和文件块 要了解 Postgres 的存储管理,需要先对 Postgres 的表文件的组织方式、类型有一个简单的了解。 Postgres 中的表文件可能会非常大,在物理存储上会将表文件拆分为多个,每一个表文件通过 segno 来区分。 在 Postgres 的数据目录中,表文件的存储格式为 base/<database oid>/