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&type=crossover">https://www.enterprisedb.com/postgresql-962-binaries-win64?ls=crossover&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,达到兼容。(比如动态内存分配策略,预加载动态库的位置等)