Thread: Relative path specified for data_directory is not working as expected
Relative path specified for data_directory is not working as expected
From
Eduard-Cristian Stefan
Date:
I have PostgreSQL 9.0.4-1 running as a service on Windows XP Home Edition, with the command line of the service being: D:\me\usr\PostgreSQL\bin/pg_ctl.exe runservice -N "pgsql" -D "d:/me/etc/PostgreSQL" In the postgresql.conf file I have the following settings: data_directory = '../../data/PostgreSQL' external_pid_file = '../../var/run/PostgreSQL.pid' log_directory = '../../var/log/PostgreSQL' In this configuration the PostgreSQL service fails to start with the message: FATAL: data directory "C:/WINDOWS/system32/../../data/PostgreSQL" does not exist If using an absolute path for data_directory like this: data_directory = 'd:/me/data/PostgreSQL' then the service starts ok, with the curent directory of pg_ctl.exe being C:\WINDOWS\system32\, while the pid file and the logs are set to the desired location. I can confirm this behavior by running postgres.exe from the console, and for relative paths the data_directory is relative to the current folder from where postgres.exe is launched, and both external_pid_file and log_directory are relative to the directory specified with the -D option of the command line. For the record, there is no PGDATA environment variable defined. Have a nice day, Eduard
Eduard-Cristian Stefan wrote: > I have PostgreSQL 9.0.4-1 running as a service on Windows XP Home > Edition, > with the command line of the service being: > > D:\me\usr\PostgreSQL\bin/pg_ctl.exe runservice -N "pgsql" -D > "d:/me/etc/PostgreSQL" > > In the postgresql.conf file I have the following settings: > > data_directory = '../../data/PostgreSQL' > external_pid_file = '../../var/run/PostgreSQL.pid' > log_directory = '../../var/log/PostgreSQL' > > In this configuration the PostgreSQL service fails to start with the > message: > > FATAL: data directory "C:/WINDOWS/system32/../../data/PostgreSQL" > does not exist > > If using an absolute path for data_directory like this: > > data_directory = 'd:/me/data/PostgreSQL' > > then the service starts ok, with the curent directory of pg_ctl.exe > being C:\WINDOWS\system32\, while the pid file and the logs > are set to the desired location. > > I can confirm this behavior by running postgres.exe from the console, > and for relative paths the data_directory is relative to the current > folder > from where postgres.exe is launched, and both external_pid_file and > log_directory > are relative to the directory specified with the -D option of the > command line. > > For the record, there is no PGDATA environment variable defined. > > Have a nice day, > Eduard > Can't the service script be something like cd d:/me/data/PostgreSQL; ./pg_ctl.exe runservice -N "pgsql" -D "d:/me/etc/PostgreSQL"
Re: Relative path specified for data_directory is not working as expected
From
Eduard-Cristian Stefan
Date:
On Fri, Jun 24, 2011 at 09:42, Rob Sargent <robjsargent@gmail.com> wrote: > Can't the service script be something like > cd d:/me/data/PostgreSQL; ./pg_ctl.exe runservice -N "pgsql" -D > "d:/me/etc/PostgreSQL" Don't know about that, the service was installed by pg_ctl. Still, if two relative paths are based on one folder and the other relative path is based on another folder, I can call it a bug (or an undocumented feature). Have a nice day, Eduard