2011-09-15 60 views
1

我想将POSTGRESQL数据库从一台服务器移到另一台服务器。为了做到这一点,我做了一个pg_dump,然后在新服务器上创建一个新的数据库后,我尝试恢复pg_dumped文件。在大部分情况下,恢复是正常的,但一张桌子没有复制。我遇到无效UTF8字节序列的问题

pg_restore: [archiver (db)] COPY failed: ERROR: invalid byte sequence for encoding "UTF8": 0x92 
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". 

现在,检查数据库属性后,事实证明,原始表在SQL_ASC2编码,但我创建了一个新的UTF8。 我对编码一无所知,但不是UTF8向后兼容ASC2?那么,为什么有一个无效的字节序列?

将新数据库更改为使用SQL_ASC2的数据库会修复此问题吗? 如果我必须更改新数据库的编码,我该如何做?我可以改变它,还是必须从头开始并重新制作整个数据库?

感谢您的帮助!

回答

1

之前连接到您可以设置CLIENT_ENCODING为“LATIN9”数据库(它可能是,无论如何:它将被接受),您可以这样做:

1)发行pg_restore能够使用一个-f my_filename标志。

2)编辑所得到的文件(有可能已经是一个 “SET CLIENT_ENCODING = 'UTF8';”。本顶部附近)

3) “的psql -U用户名DBNAME <文件名” 提交。 (在大多数情况下,您将不得不提供不同的用户名或dbname;“\ connect newdbname”位于脚本的顶部并将接管,有时甚至需要先创建用户)

+0

谢谢,我没有完全按照你所说的做,但是当我创建了备份文件(对于表中的问题),我选择了latin9,然后我恢复了表。有些数据看起来有些不同,实际上有些数据现在是可读的,而在没有数据之前,虽然还有一些时髦的角色,噢,他们之前就在那里,只是不同类型的时髦。 – zermy

0

如果你在一个* nix盒子上,并且你的pg_dump文件是纯文本文件,那么你可以在导入到postgres之前通过iconv运行转储文件。

相关问题