暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

PostgreSQL数据目录跨平台使用

原创 多米爸比 2020-04-10
3126

Java编写的程序可以跨平台使用,因为不同平台有对应的JVM解析处理字节码。
PG的数据目录文件也可以跨平台使用,下面以9.2版本一个实验来演示

为什么要这样的做:想用工具分析winSever下初始化的数据文件
大多数工具win下使用不方便,看看能否-D挂载到linux下,进行进一步分析处理

Linux环境准备

1.使用9.2版本源码编译安装
2.使用默认参数编译
3.尝试直接挂载
$ pg_ctl -D data start &
报错信息如下
FATAL:  database files are incompatible with server
DETAIL:  The database cluster was initialized without USE_FLOAT8_BYVAL 
but the server was compiled with USE_FLOAT8_BYVAL.
HINT:  It looks like you need to recompile or initdb.

根据错误提示编译器使用float4,禁用float8重新编译
make clean
./configure --prefix=/opt/pg92 --disable-float8-byval
make && make install

再次挂载数据目录,正常

反向操作(Linux–>Win)

1.Liunx先初始化
$ initdb -D /home/postgres/data -W

2.data数据目录传到win下挂载
启动信息如下:
正在启动服务器进程
请按任意键继续. . . 
LOG:  invalid value for parameter "lc_monetary": "en_US.UTF-8"
LOG:  invalid value for parameter "lc_numeric": "en_US.UTF-8"
LOG:  invalid value for parameter "lc_time": "en_US.UTF-8"
FATAL:  configuration file "c:/.../../postgresql.conf" contains errors

本地化相关参数报错,修改postgresql.conf,修改为C,再次启动,还是报错如下
FATAL:  could not load pg_hba.conf

检查发现默认打开了local条目,注释掉后再次启动,提示编码及locale错误
psql: FATAL:  database locale is incompatible with operating system
描述:  The database was initialized with LC_COLLATE "en_US.UTF-8",  
which is not recognized by setlocale().
提示:  Recreate the database with another locale or 
install the missing locale.

正确操作

1.初始化指定通用编码UTF8  locale使用本地化C
$ initdb --encoding=UTF8 --locale=C \
-D /home/postgres/data \
-W

2.pg_hba.conf去掉local条目

3.win下启动测试,建表插入数据正常
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

文章被以下合辑收录

评论