PgAdmin III,打开服务器状态给出“编码UTF8的无效字节序列”

问题描述 投票:10回答:2

我在同步复制中有两个Postgres 9.3服务器。

我需要重新启动奴隶才能在archive_cleanup_command中加载新的recovery.conf

服务器正确重启,现在与主服务器完全同步。

但是当我在PgAdmin III(可执行文件位于主服务器上)中打开从属服务器的“服务器状态”面板时,我收到一些错误,如下所示:

invalid byte sequence for encoding “UTF8”加上一些十六进制代码

这可能是因为我在~中放了一个波浪形的archive_cleanup_command,但它没有用,然后我删除它并且命令正常工作。

也许~已被写入某处并且它不是有效的char ...但我也删除了日志......

从服务器的日志有很多行,如下所示:

2015-02-13 11:11:32 CET ERROR:  invalid byte sequence for encoding “UTF8”: 0xe8 0x20 0x73
2015-02-13 11:11:32 CET STATEMENT:  SELECT pg_file_read('pg_log/postgresql-2015-02-13_111038.log', 0, 50000)

请注意,postgresql-2015-02-13_111038.log是最后一个日志,我从中得到这些行。

postgresql utf-8 pgadmin
2个回答
4
投票

您遇到的问题是区域设置lc_messages设置为与数据库编码不同的编码。因此,使用Windows-1252编码将某些消息写入日志,而当您尝试使用PgAdmin查看日志时,它会尝试使用UTF-8解释该文件。在日志中写入的一些字节序列不是有效的UTF-8,导致错误。

实际上,postgresql中不同语言环境的交互方式可能会导致日志文件中出现混合编码。这上面有一个Bug Report,但它看起来并没有得到解决。

解决这个问题最简单的方法可能是将lc_messages设置为English_United States.UTF-8

lc_messages与服务器上的所有数据库(或至少所有使用相同编码的数据库)对齐也是更可取的。

请务必删除任何现有的日志文件,因为它们已包含不正确的编码。


0
投票

这是因为您的postgresql.log已损坏,如'select pf_file_read ....'语句中所述。

如果您在服务器日志上执行“触摸”(可能在备份日志之后),并重新连接,您将不再看到此unicode错误,因此,您将能够进一步使用pgadmin III。

© www.soinside.com 2019 - 2024. All rights reserved.