我有两台同步复制的Postgres 9.3服务器。
我需要重新启动奴隶才能在archive_cleanup_command
中加载新的recovery.conf
。
服务器正确重启,现在它与主服务器完全同步。
但是当我打开"服务器状态" PgAdmin III中的从属服务器面板(可执行文件位于主服务器上),我得到一些错误:
invalid byte sequence for encoding “UTF8”
加上一些十六进制代码
可能是因为我在~
中加了一个代字号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
是最后一个日志,我从这个日志中获取这些日志。
答案 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。