Обсуждение: PostgreSQL default data location
I am running Trustix 3.0 RC2 and am trying to set the default data location for PostgreSQL as follows: I changed the default PostgreSQL data directory by running initdb -D /vol1/pgsql/data as the postgres user. Next I edited /etc/sysconfig/postgresql to change the PGDATA variable to the new directory. When I try to start postgreSQL it chokes saying the data directory /var/lib/posgresql/data has not been initilized, which is true but it should be trying to use the new data directory! I then also tried editing /etc/sysconfig/postmaster.args to add the -D /vol1/pgsql/data option to it but this also did not work! After looking at the /etc/init.d/postgresql script I put a symbolic link in /etc/sysconfig/postgresql.d to point to the file /etc/sysconfig/postgresql. Now if I use the command 'service postgrsql start' everything works fine...But on reboot the same problem occurs, postgresql tries to use the /var/lib/postgres/data directory still. What seems weird is that the service command works (or '/etc/init.d/postgresql start') but if I try to run the script '/etc/rc3.d/S85postgresql start' it looks for the default data directory and chokes. To make a long story short how do I change the default data diretory for PostgreSQL? What did I do wrong? James Herbers
Found the problem,
It is a problem with the /etc/init.d/postgresql script.
On line 31 the script grabs the defaults from the
/etc/sysconfig/postgresql file which is where they should be. But then
on line 41-42 it goes to set these defaults by using the file
/etc/sysconfig/postgresql.d/${NAME} which would be the name of the
script running, fine if the script is /etc/init.d/postgresql. In the
case of going to run level 3 the file name is S85postgresql (a link to
/etc/init.d/postgresql)! Well there is no file with defaults named
/etc/sysconfig/postgresql.d/S85postgresql !!
Lines 40- 42 of this script should match the defaults from line 31 and
not reference the the name of the script being run. It should read:
# Override defaults from /etc/sysconfig/postgresql if file is present
[ -f /etc/sysconfig/postgresql ] && \
. /etc/sysconfig/postgresql
NOT as it does:
# Override defaults from /etc/sysconfig/postgresql if file is present
[ -f /etc/sysconfig/postgresql.d/${NAME} ] && \
. /etc/sysconfig/postgresql.d/${NAME}
James Herbers
James Herbers <james@herbers.ca> writes:
> It is a problem with the /etc/init.d/postgresql script.
> On line 31 the script grabs the defaults from the
> /etc/sysconfig/postgresql file which is where they should be. But then
> on line 41-42 it goes to set these defaults by using the file
> /etc/sysconfig/postgresql.d/${NAME} which would be the name of the
> script running, fine if the script is /etc/init.d/postgresql. In the
> case of going to run level 3 the file name is S85postgresql (a link to
> /etc/init.d/postgresql)! Well there is no file with defaults named
> /etc/sysconfig/postgresql.d/S85postgresql !!
You need to have a word with your Linux distro vendor, I think. The
init scripts shipped by PGDG and Red Hat, at least, have gotten this
right for a long time.
regards, tom lane