最近,我们使用pg_dump和pg_restore实用程序将所有数据库从Debian 5上的PostgreSQL版本8.4迁移到运行CentOS 6.5的不同服务器上的PostgreSQL版本9.5。数据库的编码为SQL_ASCII
表包含大量编码数据。剩余的数据库似乎正常工作,但只是特定的数据库。
当我尝试从新服务器上的数据库中获取数据时,我收到:
megaart_www=# select * from data_tbl limit 10; ERROR: invalid byte sequence for encoding "UTF8": 0xc1 0xe0
为了确保两台服务器上的配置完全相同,我运行这些命令。结果是一样的。
postgres=# SHOW client_encoding; client_encoding ----------------- UTF8 (1 row)
postgres=# SHOW server_encoding; server_encoding ----------------- UTF8 (1 row)
数据库的编码:
megaart_www=# show server_encoding; server_encoding ----------------- SQL_ASCII (1 row)
数据库服务器配置完全相同,但仍会收到错误。
答案 0 :(得分:1)
所以你的server_encoding是新服务器上的SQL_ASCII,但你的client_encoding是UTF8吗?基本上它说UTF8不知道那些字节的翻译。我想如果你使你的client_encoding匹配:SET client_encoding ='SQL_ASCII'并重复查询,它将正常工作。您是否真的希望将数据存储为SQL_ASCII,这是您需要回答的问题。
服务器编码是在实例创建时配置的,因此如果您需要它来匹配旧服务器(即UTF8),则需要重新创建实例并重新加载数据。可以在会话级别更改客户端编码。这是导致错误的这两个参数的翻译。