PgAdmin III,打开服务器状态给出"无效字节序列,用于编码UTF8"

时间:2015-02-13 10:18:09

标签: postgresql utf-8 pgadmin

我有两台同步复制的Postgres 9.3服务器。

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

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

但是当我打开"服务器状态" PgAdmin III中的从属服务器面板(可执行文件位于主服务器上),我得到一些错误:

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

enter image description here

可能是因为我在~中加了一个代字号archive_cleanup_command,但它没有用,然后我删除它并且命令正常工作。

也许~已写在某处并且它不是有效的字符...但我也删除了日志......

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

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是最后一个日志,我从这个日志中获取这些日志。

2 个答案:

答案 0 :(得分:4)

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

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

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

最好让lc_messages在服务器上的所有数据库中对齐(或者至少所有数据库使用相同的编码)。

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

答案 1 :(得分:0)

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

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