, On 7 May 2017 at 17:19, Tom Lane <t...@sss.pgh.pa.us> wrote:
> Amit Kapila <amit.kapil...@gmail.com> writes:
>> On Wed, May 3, 2017 at 7:21 AM, Tom Lane <t...@sss.pgh.pa.us> wrote:
>>> Improve performance of timezone loading, especially pg_timezone_names view.
>
>> I am consistently getting below error after this commit in my Win7 machine:
>> running bootstrap script ... 2017-05-07 05:09:13.383 GMT [7908] LOG:
>> could not open directory "/installation/share/timezone/posixrules": No
>> such file or directory
>
>> This occurs both during initdb and server start.
>
> You sure it wasn't there before, too?  That commit did not add any
> file reads that didn't happen before.

It didn't exist before either, but I don't think the error is what you
think. Please note the error message indicated it's looking for a
"directory" named posixrules, not the file.

The error seems to be due to this code:

if (canonname == NULL)
{
int result;

fullname[fullnamelen] = '/';
/* test above ensured this will fit: */
strcpy(fullname + fullnamelen + 1, name);
result = open(fullname, O_RDONLY | PG_BINARY, 0);
if (result >= 0)
return result;
/* If that didn't work, fall through to do it the hard way */
}

where we append the name, then try to open the file, but since the
file does not exist result is < 0 and we fall through to the for(;;)
loop and try to do scan_directory_ci() on the filename rather than the
directory.

On windows, where I also get the error, the stacktrace, as of
b58c433ef90b is as follows:

  postgres.exe!scan_directory_ci(const char * dirname, const char *
fname, int fnamelen, char * canonname, int canonnamelen) Line 162 C
> postgres.exe!pg_open_tzfile(const char * name, char * canonname) Line 127 C
  postgres.exe!tzloadbody(const char * name, char * canonname, state *
sp, char doextend, local_storage * lsp) Line 240 C
  postgres.exe!tzload(const char * name, char * canonname, state * sp,
char doextend) Line 564 C
  postgres.exe!tzparse(const char * name, state * sp, char lastditch) Line 959 C
  postgres.exe!tzloadbody(const char * name, char * canonname, state *
sp, char doextend, local_storage * lsp) Line 421 C
  postgres.exe!tzload(const char * name, char * canonname, state * sp,
char doextend) Line 564 C
  postgres.exe!pg_tzset(const char * name) Line 291 C
  postgres.exe!check_log_timezone(char * * newval, void * * extra,
GucSource source) Line 415 C
  postgres.exe!call_string_check_hook(config_string * conf, char * *
newval, void * * extra, GucSource source, int elevel) Line 9905 C
  postgres.exe!parse_and_validate_value(config_generic * record, const
char * name, const char * value, GucSource source, int elevel,
config_var_val * newval, void * * newextra) Line 5834 C
  postgres.exe!set_config_option(const char * name, const char *
value, GucContext context, GucSource source, GucAction action, char
changeVal, int elevel, char is_reload) Line 6437 C
  postgres.exe!ProcessConfigFileInternal(GucContext context, char
applySettings, int elevel) Line 441 C
  postgres.exe!ProcessConfigFile(GucContext context) Line 158 C
  postgres.exe!SelectConfigFiles(const char * userDoption, const char
* progname) Line 4810 C
  postgres.exe!PostmasterMain(int argc, char * * argv) Line 854 C
  postgres.exe!main(int argc, char * * argv) Line 229 C
  postgres.exe!__tmainCRTStartup() Line 536 C
  postgres.exe!mainCRTStartup() Line 377 C
  kernel32.dll!00007ffdab5e13d2() Unknown
  ntdll.dll!00007ffdadf754e4() Unknown

Perhaps we just need to put the NUL char back, to trim off the filename again:

/* If that didn't work, fall through to do it the hard way */
fullname[fullnamelen] = '\0';

but I've not yet looked into why the file is missing in the first place.


-- 
Sent via pgsql-committers mailing list (pgsql-committers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-committers

Reply via email to