Re: BUG #5661: The character encoding in logfile is confusing.

Поиск
Список
Период
Сортировка
От Craig Ringer
Тема Re: BUG #5661: The character encoding in logfile is confusing.
Дата
Msg-id 4C9D9B42.5060007@postnewspapers.com.au
обсуждение исходный текст
Ответ на Re: BUG #5661: The character encoding in logfile is confusing.  (Tom Lane <tgl@sss.pgh.pa.us>)
Список pgsql-hackers
On 22/09/2010 9:41 PM, Tom Lane wrote:
> Craig Ringer<craig@postnewspapers.com.au>  writes:
>> On 22/09/2010 5:45 PM, Peter Eisentraut wrote:
>>> We need to produce the log output in the server encoding, because that's
>>> how we need to send it to the client.
>
>> That doesn't mean it can't be recoded for writing to the log file,
>> though. Perhaps it needs to be. It should be reasonably practical to
>> detect when the database and log encoding are the same and avoid the
>> transcoding performance penalty, not that it's big anyway.
>
> We have seen ... and rejected ... such proposals before.  The problem is
> that "transcode to some other encoding" is not a simple and guaranteed
> error-free operation.  As an example, if you choose to name some table
> using a character that doesn't exist in the log encoding, you have just
> ensured that no message about that table will ever get to the log.

Well, an arguably reasonable if still suboptimal approach is to mask out 
characters without any representation in the target encoding, replacing 
them with a substitute ("?" or whatever). The rest of the log message is 
still emitted that way.

Currently, Pg may as well be emitting "!@#!#!#!@#$!@#$" for these log 
records. It's garbage unless the user's editor/log viewer/whatever 
happens to use the encoding of that set of messages, turning all the 
others into garbage instead. To interpret them, I had to

It's not a big deal with languages that mostly use the 7-bit ascii space 
most encodings share, but for russian, chinese, japanese, thai, the 
various indian languages, etc etc etc it's pretty awful, as seen in 
Mikio's example log files.

> Nice way to hide your activities from the DBA ;-)

Emitting messages in the wrong encoding doesn't do the DBA any favours 
either. Automated log analysis and reporting will have a hard time 
dealing with the logs, and the DBA will have to keep on switching 
encodings in their editor/viewer to interpret or search the logs. 
Assuming they know how, and know they need to.

> Transcoding also
> eats memory, which might be in exceedingly short supply while trying
> to report an "out of memory" error; and IIRC there are some other
> failure scenarios to be concerned about.

Yep, that's certainly a problem. Pre-transcoding them on backend start 
isn't particularly desirable (wasted startup time, memory) and neither 
is pre-allocating extra memory for use on fatal exit paths.

OTOH, don't the current message translations also cost at least some 
memory, too?

I don't have a good answer for this issue. Only rather less-than-good 
ideas like: mmap() a file the postmaster generates that contains various 
fatal messages, already in the right encodings/translations, with an 
offset table at the front? Icky, but effective and doesn't waste 
precious shared memory or produce new unsharable allocations in the 
backends that'll only ever get used when something breaks.

-- 
Craig Ringer

Tech-related writing at http://soapyfrogs.blogspot.com/


В списке pgsql-hackers по дате отправления:

Предыдущее
От: Darren Duncan
Дата:
Сообщение: Re: What happened to the is_ family of functions proposal?
Следующее
От: Craig Ringer
Дата:
Сообщение: Re: What happened to the is_ family of functions proposal?