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进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。