Relative path specified for data_directory is not working as expected
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 existIf 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"
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