We can choose different encodings from platform-dependent one for database, but postgres writes serverlogs in the database encoding. As the result, serverlogs are filled with broken characters.
The problem could occur on all platforms, however, there is a solution for win32. Since Windows supports wide characters to write logs, we can convert log texts => UTF-8 => UTF-16 and pass them to WriteConsoleW() and ReportEventW(). Especially in Japan, encoding troubles on Windows are unavoidable because postgres doesn't support Shift-JIS for database encoding, that is the native encoding for Windows Japanese edition. If we also want to support the same functionality on non-win32 platform, we might need non-throwable version of pg_do_encoding_conversion(): log_message_to_write = pg_do_encoding_conversion_nothrow( log_message_in_database_encoding, GetDatabaseEncoding() /* as src_encoding */, GetPlatformEncoding() /* as dst_encoding */) and pass the result to stderr and syslog. But it requires major rewrites of conversion functions, so I'd like to submit a solution only for win32 for now. Also, the issue is not so serious on non-win32 platforms because we can choose UTF-8 or EUC_* on those platforms. Regards, --- ITAGAKI Takahiro NTT Open Source Software Center
eventlog-20090817.patch
Description: Binary data
-- Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-hackers