Re: Win32 timezone matching - Mailing list pgsql-hackers
| From | Tom Lane |
|---|---|
| Subject | Re: Win32 timezone matching |
| Date | |
| Msg-id | 20311.1271296097@sss.pgh.pa.us Whole thread Raw |
| In response to | Re: Win32 timezone matching (Magnus Hagander <magnus@hagander.net>) |
| Responses |
Re: Win32 timezone matching
|
| List | pgsql-hackers |
Magnus Hagander <magnus@hagander.net> writes:
> On Wed, Apr 7, 2010 at 21:01, Tom Lane <tgl@sss.pgh.pa.us> wrote:
>> ... lack either the note about defaulting to GMT or the hint. I guess
>> we should add both of those to the failure cases in the Windows version
>> of identify_system_timezone. Should we also change the WARNING errlevel
>> to LOG? I think the latter is more likely to actually get into the log.
> You are suggesting adding this after the "could not find match"
> message, correct? Not replacing it? Because if we replace it, we loose
> the information of what we failed to match. So basically like
> attached?
No, I was thinking more like the attached. This changes the Unix code
to separate the info about the fallback timezone into errdetail, and
then makes the Windows messages follow that style.
> Also, would LOG be *more* likely to be seen than a WARNING? Why would that be?
Because that's how log levels sort for the postmaster log. This isn't
an interactive warning --- we will never be executing this code in a
regular backend, only in the postmaster.
regards, tom lane
Index: pgtz.c
===================================================================
RCS file: /cvsroot/pgsql/src/timezone/pgtz.c,v
retrieving revision 1.71
diff -c -r1.71 pgtz.c
*** pgtz.c 9 Apr 2010 11:49:51 -0000 1.71
--- pgtz.c 15 Apr 2010 01:40:39 -0000
***************
*** 498,505 ****
if (std_zone_name[0] == '\0')
{
ereport(LOG,
! (errmsg("could not determine system time zone, defaulting to \"%s\"", "GMT"),
! errhint("You can specify the correct timezone in postgresql.conf.")));
return NULL; /* go to GMT */
}
--- 498,507 ----
if (std_zone_name[0] == '\0')
{
ereport(LOG,
! (errmsg("could not determine system time zone"),
! errdetail("The PostgreSQL time zone will be set to \"%s\".",
! "GMT"),
! errhint("You can specify the correct timezone in postgresql.conf.")));
return NULL; /* go to GMT */
}
***************
*** 533,541 ****
(-std_ofs > 0) ? "+" : "", -std_ofs / 3600);
ereport(LOG,
! (errmsg("could not recognize system timezone, defaulting to \"%s\"",
! resultbuf),
! errhint("You can specify the correct timezone in postgresql.conf.")));
return resultbuf;
}
--- 535,544 ----
(-std_ofs > 0) ? "+" : "", -std_ofs / 3600);
ereport(LOG,
! (errmsg("could not recognize system timezone"),
! errdetail("The PostgreSQL time zone will be set to \"%s\".",
! resultbuf),
! errhint("You can specify the correct timezone in postgresql.conf.")));
return resultbuf;
}
***************
*** 1076,1084 ****
if (!tm)
{
! ereport(WARNING,
! (errmsg_internal("could not determine current date/time: localtime failed")));
! return NULL;
}
memset(tzname, 0, sizeof(tzname));
--- 1079,1090 ----
if (!tm)
{
! ereport(LOG,
! (errmsg("could not identify system time zone: localtime() failed"),
! errdetail("The PostgreSQL time zone will be set to \"%s\".",
! "GMT"),
! errhint("You can specify the correct timezone in postgresql.conf.")));
! return NULL; /* go to GMT */
}
memset(tzname, 0, sizeof(tzname));
***************
*** 1089,1095 ****
if (strcmp(tzname, win32_tzmap[i].stdname) == 0 ||
strcmp(tzname, win32_tzmap[i].dstname) == 0)
{
! elog(DEBUG4, "TZ \"%s\" matches Windows timezone \"%s\"",
win32_tzmap[i].pgtzname, tzname);
return win32_tzmap[i].pgtzname;
}
--- 1095,1101 ----
if (strcmp(tzname, win32_tzmap[i].stdname) == 0 ||
strcmp(tzname, win32_tzmap[i].dstname) == 0)
{
! elog(DEBUG4, "TZ \"%s\" matches system time zone \"%s\"",
win32_tzmap[i].pgtzname, tzname);
return win32_tzmap[i].pgtzname;
}
***************
*** 1107,1115 ****
KEY_READ,
&rootKey) != ERROR_SUCCESS)
{
! ereport(WARNING,
! (errmsg_internal("could not open registry key to identify Windows timezone: %i", (int)
GetLastError())));
! return NULL;
}
for (idx = 0;; idx++)
--- 1113,1125 ----
KEY_READ,
&rootKey) != ERROR_SUCCESS)
{
! ereport(LOG,
! (errmsg("could not open registry key to identify system time zone: %i",
! (int) GetLastError()),
! errdetail("The PostgreSQL time zone will be set to \"%s\".",
! "GMT"),
! errhint("You can specify the correct timezone in postgresql.conf.")));
! return NULL; /* go to GMT */
}
for (idx = 0;; idx++)
***************
*** 1134,1148 ****
{
if (r == ERROR_NO_MORE_ITEMS)
break;
! ereport(WARNING,
! (errmsg_internal("could not enumerate registry subkeys to identify Windows timezone: %i", (int)
r)));
break;
}
if ((r = RegOpenKeyEx(rootKey, keyname, 0, KEY_READ, &key)) != ERROR_SUCCESS)
{
! ereport(WARNING,
! (errmsg_internal("could not open registry subkey to identify Windows timezone: %i", (int) r)));
break;
}
--- 1144,1158 ----
{
if (r == ERROR_NO_MORE_ITEMS)
break;
! ereport(LOG,
! (errmsg_internal("could not enumerate registry subkeys to identify system time zone: %i", (int)
r)));
break;
}
if ((r = RegOpenKeyEx(rootKey, keyname, 0, KEY_READ, &key)) != ERROR_SUCCESS)
{
! ereport(LOG,
! (errmsg_internal("could not open registry subkey to identify system time zone: %i", (int) r)));
break;
}
***************
*** 1150,1157 ****
namesize = sizeof(zonename);
if ((r = RegQueryValueEx(key, "Std", NULL, NULL, zonename, &namesize)) != ERROR_SUCCESS)
{
! ereport(WARNING,
! (errmsg_internal("could not query value for 'std' to identify Windows timezone \"%s\": %i",
keyname, (int) r)));
RegCloseKey(key);
continue; /* Proceed to look at the next timezone */
--- 1160,1167 ----
namesize = sizeof(zonename);
if ((r = RegQueryValueEx(key, "Std", NULL, NULL, zonename, &namesize)) != ERROR_SUCCESS)
{
! ereport(LOG,
! (errmsg_internal("could not query value for key \"std\" to identify system time zone \"%s\": %i",
keyname, (int) r)));
RegCloseKey(key);
continue; /* Proceed to look at the next timezone */
***************
*** 1167,1174 ****
namesize = sizeof(zonename);
if ((r = RegQueryValueEx(key, "Dlt", NULL, NULL, zonename, &namesize)) != ERROR_SUCCESS)
{
! ereport(WARNING,
! (errmsg_internal("could not query value for 'dlt' to identify Windows timezone \"%s\": %i",
keyname, (int) r)));
RegCloseKey(key);
continue; /* Proceed to look at the next timezone */
--- 1177,1184 ----
namesize = sizeof(zonename);
if ((r = RegQueryValueEx(key, "Dlt", NULL, NULL, zonename, &namesize)) != ERROR_SUCCESS)
{
! ereport(LOG,
! (errmsg_internal("could not query value for key \"dlt\" to identify system time zone \"%s\": %i",
keyname, (int) r)));
RegCloseKey(key);
continue; /* Proceed to look at the next timezone */
***************
*** 1194,1210 ****
if (strcmp(localtzname, win32_tzmap[i].stdname) == 0 ||
strcmp(localtzname, win32_tzmap[i].dstname) == 0)
{
! elog(DEBUG4, "TZ \"%s\" matches localized Windows timezone \"%s\" (\"%s\")",
win32_tzmap[i].pgtzname, tzname, localtzname);
return win32_tzmap[i].pgtzname;
}
}
}
! ereport(WARNING,
! (errmsg("could not find a match for Windows timezone \"%s\"",
! tzname)));
! return NULL;
}
#endif /* WIN32 */
--- 1204,1223 ----
if (strcmp(localtzname, win32_tzmap[i].stdname) == 0 ||
strcmp(localtzname, win32_tzmap[i].dstname) == 0)
{
! elog(DEBUG4, "TZ \"%s\" matches localized system time zone \"%s\" (\"%s\")",
win32_tzmap[i].pgtzname, tzname, localtzname);
return win32_tzmap[i].pgtzname;
}
}
}
! ereport(LOG,
! (errmsg("could not find a match for system time zone \"%s\"",
! tzname),
! errdetail("The PostgreSQL time zone will be set to \"%s\".",
! "GMT"),
! errhint("You can specify the correct timezone in postgresql.conf.")));
! return NULL; /* go to GMT */
}
#endif /* WIN32 */
pgsql-hackers by date: