我被赋予了将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中,这样我在执行恢复时不会遇到任何问题?
提前致谢.