%d in log_line_prefix doesn't work for bg/autovacuum workers - Mailing list pgsql-hackers

From Andres Freund
Subject %d in log_line_prefix doesn't work for bg/autovacuum workers
Date
Msg-id 20140516175456.GO23662@alap3.anarazel.de
Whole thread Raw
Responses 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
List 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 by date:

Previous
From: Tom Lane
Date:
Subject: Re: chr() is still too loose about UTF8 code points
Next
From: Tom Lane
Date:
Subject: Re: %d in log_line_prefix doesn't work for bg/autovacuum workers