%d in log_line_prefix doesn't work for bg/autovacuum workers

Поиск
Список
Период
Сортировка
От Andres Freund
Тема %d in log_line_prefix doesn't work for bg/autovacuum workers
Дата
Msg-id 20140516175456.GO23662@alap3.anarazel.de
обсуждение исходный текст
Ответы Re: %d in log_line_prefix doesn't work for bg/autovacuum workers
Re: %d in log_line_prefix doesn't work for bg/autovacuum workers
Список pgsql-hackers
Hi,

elog.c's log_line_prefix() processes %d with:           case 'd':               if (MyProcPort)               {
         const char *dbname = MyProcPort->database_name;
 
                   if (dbname == NULL || *dbname == '\0')                       dbname = _("[unknown]");
  if (padding != 0)                       appendStringInfo(buf, "%*s", padding, dbname);                   else
             appendStringInfoString(buf, dbname);               }               else if (padding != 0)
appendStringInfoSpaces(buf,                                          padding > 0 ? padding : -padding);
 
write_csvlog() uses similar logic.

Unfortunately MyProcPort only exists in user initiated backends.

It's imo pretty annoying that neither bgworkers nor autovacuum workers
show the proper database in the log. Why don't we just populate a global
variable in InitPostgres() once we're sure which database the backend is
connected to? We could fill fake MyProcPorts, but that doesn't seem like
a good idea to me.

Greetings,

Andres Freund

-- Andres Freund                       http://www.2ndQuadrant.com/PostgreSQL Development, 24x7 Support, Training &
Services



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

Предыдущее
От: Tom Lane
Дата:
Сообщение: Re: chr() is still too loose about UTF8 code points
Следующее
От: Tom Lane
Дата:
Сообщение: Re: %d in log_line_prefix doesn't work for bg/autovacuum workers