2

我正在尝试使用pgloader将数据库从 sqlite 迁移到 postgresql 。我的 sqlite db 是 data.db,所以我试试这个

pgloader ./var/data.db postgres://***@ec2-54-83-50-174.compute-1.amazonaws.com:5432/mydb?sslmode=require

输出:

pgloader version 3.6.1
sb-impl::*default-external-format* :UTF-8
tmpdir: #P"/var/folders/65/x6spw10s4jgd3qkhdq96bk8c0000gn/T/"
KABOOM!

2019-04-11T19:22:47.022000+01:00 NOTICE Starting pgloader, log system is ready.

FATAL error: :UTF-8 stream decoding error on #<SB-SYS:FD-STREAM for "file /Users/mackbookpro/Desktop/dev/www/Beyti/var/data.db" {1005892A93}>: the octet sequence #(130) cannot be decoded.

Date/time: 2019-04-11-18:22An unhandled error condition has been signalled: :UTF-8 stream decoding error on #<SB-SYS:FD-STREAM for "file /Users/mackbookpro/Desktop/dev/www/Beyti/var/data.db" {1005892A93}>: the octet sequence #(130) cannot be decoded.

关于这个问题的想法?先感谢您

4

1 回答 1

2

这是一个字符编码问题。

在我的例子中,罪魁祸首“八位字节序列#(130)”对应于“é”,它被编码为\x82。iconv 失败。我在字节流中用\x65(ascii char“e”)替换了那些损坏的\x82,然后我摆脱了它。

<bad_file xxd -c1 -p | sed s/82/65/ | xxd -r -p > good_new_file

(在 irc freenode #gcu 上为 Natacha 干杯 :) ) 编辑:法语问题?与 #133 "à" 相同的问题,相同的解决方案 \x85 -> \x61

编辑2:我刚刚发现的一点概括:pgloader所指的“八位字节序列”是ascii表的十进制排名。当您在“八位字节序列”中获得高于 127 的值时,您将进入扩展的 ascii 表并产生错误。我刚遇到#144 的问题?它是 \x90。代替 :)

于 2019-05-14T09:41:45.530 回答