postgresql – 当源数据库以UTF8编码时,如何解决恢复时UTF8无效的字节序列复制错误?

前端之家收集整理的这篇文章主要介绍了postgresql – 当源数据库以UTF8编码时,如何解决恢复时UTF8无效的字节序列复制错误?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我被赋予了将Postgresql 8.2.x数据库迁移到另一台服务器的任务.为此,我使用pgAdmin 1.12.2(顺便说一下在Ubuntu 11.04上)并使用自定义/压缩格式(.backup)和UTF8编码使用备份和还原.

原始数据库是UTF8,如下所示:

-- Database: favela

-- DROP DATABASE favela;

CREATE DATABASE favela
  WITH OWNER = favela
       ENCODING = 'UTF8'
       TABLESPACE = favela
       CONNECTION LIMIT = -1;

我正在目标服务器上创建这样的数据库.但是当我使用Restore选项从.backup文件恢复数据库时,它会给我一些错误

pg_restore: restoring data for table "arena"
pg_restore: [archiver (db)] Error while PROCESSING TOC:
pg_restore: [archiver (db)] Error from TOC entry 2173; 0 35500 TABLE DATA arena favela
pg_restore: [archiver (db)] COPY Failed: ERROR:  invalid byte sequence for encoding "UTF8": 0xe3a709
HINT:  This error can also happen if the byte sequence does not match the encoding expected by the server,which is controlled by "client_encoding".
CONTEXT:  COPY arena,line 62

当我检查哪个记录触发了这个错误实际上一些vartext字段有像ç一样的变音字符(用葡萄牙语,例如“caça”),当我从记录中的文本中手动删除它们时,错误传递给下一条记录有它们 – 因为当复制有错误时它会停止在这个表上插入数据.而且我不想一个接一个地手动更换它们来实现这一目标.

但它有点奇怪,因为使用UTF8不应该出现这种问题,对吧?

我不知道他们是如何到达那里的.我只是迁移数据库,并且我不知道数据库是否像LATIN1那样,然后被错误地更改为UTF8.

有没有办法检查表/数据库是否有无效的UTF8序列?或者以任何方式强制/重新转换这些字符到UFT8中,这样我在执行恢复时不会遇到任何问题?

提前致谢.

在互联网上挖掘,我发现这是一个非常普遍的问题.常见的解决方案是使用纯文本格式转储并通过iconv提供它以更正编码.

Here是关于它的更多信息.

猜你在找的Postgre SQL相关文章