我获得了将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,以便在执行还原时不会遇到任何问题?
提前致谢。