天天看点

PostgreSQL Windows\Linux\FreeBSD的数据文件通用吗

postgresql , linux , windows , 数据文件 , 存储格式

postgresql是一个跨平台的数据库,比如支持windows, aix , linux , freebsd等。

同时也支持不同架构例如x86,arm等。

对于相同架构,不同平台,是否能实现文件级别的平移,甚至物理的流复制搭建standby呢?

理论上从数据库的存储层面来看,如果两个平台存储结构(比如堆表、索引、wal日志,clog等)一致,是可以平移的。

比如windows,linux,都是x64的,那么能不能平移? - 答案是可行的,之前平移过freebsd和linux的。(位数必须一致,32和64可不行)

从postgresql代码中,并未找到存储层面不一致的地方,大家可以搜一下#ifdef win之类的,通常与linux的系统调用(比如共享内存段的分配,内部进程通信等)差异较多,但是数据库本身存储层面没有找到差异。

那么我们来验证一下将windows中的数据文件,拷贝到linux下面使用的场景。

建议下载已经打包好的二进制。

<a href="https://www.enterprisedb.com/download-postgresql-binaries">https://www.enterprisedb.com/download-postgresql-binaries</a>

<a href="https://www.enterprisedb.com/postgresql-962-binaries-win64?ls=crossover&amp;type=crossover">https://www.enterprisedb.com/postgresql-962-binaries-win64?ls=crossover&amp;type=crossover</a>

解压到d:\pgsql

参考

<a href="https://github.com/digoal/blog/blob/master/201611/20161121_01.md">《postgresql on linux 最佳部署手册》</a>

测试插入更新删除等。

1. 目前来看,postgresql在不同平台下的存储结构是一致的,所以只要cpu架构一致,是可以实现跨平台的物理文件平移的。

2. 平移时,注意软件的编译项一致(比如数据块的大小等)。

3. 平移前,如果还安装了其他插件例如postgis,那么也必须在目标安装对应的插件。

4. 注意修改postgresql.conf,达到兼容。(比如动态内存分配策略,预加载动态库的位置等)