Re: %d in log_line_prefix doesn't work for bg/autovacuum workers
От | Andres Freund |
---|---|
Тема | Re: %d in log_line_prefix doesn't work for bg/autovacuum workers |
Дата | |
Msg-id | 20140516212746.GA9100@awork2.anarazel.de обсуждение исходный текст |
Ответ на | %d in log_line_prefix doesn't work for bg/autovacuum workers (Andres Freund <andres@2ndquadrant.com>) |
Ответы |
Re: %d in log_line_prefix doesn't work for bg/autovacuum workers
|
Список | pgsql-hackers |
Hi, On 2014-05-16 19:54:56 +0200, Andres Freund wrote: > 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. The attached simple patch implements the former idea. We could probably replace a couple of get_database_name(MyDatabaseId) calls by it, but that doesn't look that important. Greetings, Andres Freund -- Andres Freund http://www.2ndQuadrant.com/ PostgreSQL Development, 24x7 Support, Training & Services
Вложения
В списке pgsql-hackers по дате отправления: