dos与unix格式对postgresql数据迁移影响的一个记录(20140108更新)

今天(20140108)去公司从新测试了下,添加下报错信息和另外一个场景:linux

这个问题是在公司环境下出现的,在我的环境中没有重现,在公司是做个记录吧。sql

过程:数据库

1,在windows环境下把一个linux环境数据库DB1的t1数据导到另外一个Linux环境数据库DB2的t1:windows

pg_dump -a -h 189.139.1.111 -t test1 -U gpadmin postgres|psql –h 189.139.1.106  -U postgres postgres服务器

报错,导数不成功(encoding GB18030 has no equivalent in UTF8 line 2)post

2,改用copy测试

登陆DB1ui

\copy (select * from test1) to e:/test1.txt编码

切换至DB2spa

\copy test1 from e:/test1.txt

报错,提示最后一个字段数据类型不对(invalid input syntax for type date “N”(seg0 solsvr:50001…) context:copy test1 line 53 etl_date

3,检查没有发现什么问题,尝试只导入test1.txt一条记录,另存为test1_1.txt

\copy test1 from e:/test1_1.txt

居然成功了

4,这时想到应该是dos和unix格式问题,把test1.txt用ue由dos转换为unix

\copy test1 from e:/test1.txt

成功

--(表没有设惟一键,因此屡次导入也不会报错)

5,使用pg_dump -a -h 189.139.1.111 -t test1 -U gpadmin postgres|psql –h 189.139.1.106  -U postgres postgres也报错,为何呢?

当时想到加上数据编码提示:

pg_dump –a – E GBK -h 189.139.1.111 -t test1 -U gpadmin postgres|psql –h 189.139.1.106  -U postgres postgres

成功

6.另外一个场景

建立一个表只有一个Int数据类型字段,使用以上pg_dump不加编码参数也成功。

这是什么状况?导出文件是dos要转成unix,直接转储使用-E提示编码就成功,这二者是同样的性质吗?

总结:

两个状况性质不一样,pg_dump没有生成文件,不存在dos和unix格式转换问题,可是因为表中有中文,会出现编码问题,若是只有数据和英文就不出现问题如上

“6.另外一场景”所说;

copy因为是在windows下生成文件,可能出现dos和unix格式转换问题,为了验证这个,我在linux服务器copy出来再ftp文件到windows下导入确实能够正常导入。

导数据出错若是没有找到明确的问题,把编码和数据格式转化也尝试尝试也许会有收获。

相关文章
相关标签/搜索