Struggling to change default data location
Hi folks
Having a nightmare changing the default data location in 7.1
I uninstalled and re-installed 7.1 on RedHat 6.2 from the rpms with a
clean system. With the help of this list, I have set $PGDATA in my
shell config file and exported the value.
Postgres utilities such as initdb now recognise $PGDATA and I have
setup a system at my desired location.
initdb does not write a postmaster.opt file at the new location. On
system startup, it does write the .opt file to /var/lib/pgsql/data.
Editing this file with the new datapath does not change the behaviour
below.
At this stage - here is what I get...
$ /usr/bin/pg_ctl -D /www/dbdata -l logfile start
postmaster successfully started
$ pg_ctl status
pg_ctl: postmaster or postgres is not running
$ ps ax | grep postmaster
582 ? S 0:00 /usr/bin/postmaster -D /var/lib/pgsql/data
Please note:
- postmaster is running, but pg_ctl can't find it
- postmaster has started with the default datapath and is ignoring
$PGDATA
I get the same result if I launch automatically during startup.
Can anyone please help me make some sense of this? I am losing the
will to live...
Geoff Caplan
Geoff Caplan writes:
initdb does not write a postmaster.opt file at the new location. On
system startup, it does write the .opt file to /var/lib/pgsql/data.
The environment initdb runs in when it runs at system startup is probably
not the one you set up. Check the /etc/init.d/postgresql file for
details.
Editing this file with the new datapath does not change the behaviour
below.
It's not intended to.
At this stage - here is what I get...
$ /usr/bin/pg_ctl -D /www/dbdata -l logfile start
postmaster successfully started
$ pg_ctl status
pg_ctl: postmaster or postgres is not running
pg_ctl -D /www/dbdata status
$ ps ax | grep postmaster
582 ? S 0:00 /usr/bin/postmaster -D /var/lib/pgsql/data
Peculiar. Can you run
sh -x /usr/bin/pg_ctl -D /www/dbdata -l logfile start
and look how the shell command that starts the postmaster looks like?
--
Peter Eisentraut peter_e@gmx.net http://funkturm.homeip.net/~peter
Peter, thanks for your patience with a newbie. I think my stuckness stems
from 2 issues:
1) Starting environment
The environment initdb runs in when it runs at system startup is probably
not the one you set up. Check the /etc/init.d/postgresql file for
details.
This is certainly true, as my settings are overridden. I have had a look at
this file, but I am still not clear what environment it is reading when it
sets $PGDATA. Can you clarify where this environment
config file should be (on RedHat)?
2) Passing parameters to postmaster during starup
Also, the init.d script uses pg_ctl to start the postmaster. I need to pass
the -i parameter using the "postmaster" utility. (As I understand it, in
past releases of these
RPMs -i was set as a default). At what point in the startup sequence can you
pass "postmaster" utility params to the postmaster process?
I will spare you from the output from your diagnostic script till I can get
these basics sorted out...
Thanks again
Geoff Caplan
Geoff Caplan writes:
The environment initdb runs in when it runs at system startup is probably
not the one you set up. Check the /etc/init.d/postgresql file for
details.This is certainly true, as my settings are overridden. I have had a look at
this file, but I am still not clear what environment it is reading when it
sets $PGDATA. Can you clarify where this environment
config file should be (on RedHat)?
There is no config file; the location is wired in fairly deeply. You're
probably better off mounting your data volume at the appropriate place.
Also, the init.d script uses pg_ctl to start the postmaster. I need to pass
the -i parameter using the "postmaster" utility. (As I understand it, in
past releases of these
RPMs -i was set as a default). At what point in the startup sequence can you
pass "postmaster" utility params to the postmaster process?
You put options in the postgresql.conf file (under /var/lib/pgsql/data or
whereever PGDATA ends up...).
--
Peter Eisentraut peter_e@gmx.net http://funkturm.homeip.net/~peter
"Geoff Caplan" wrote:
Peter, thanks for your patience with a newbie. I think my stuckness stems
from 2 issues:1) Starting environment
The environment initdb runs in when it runs at system startup is probably
not the one you set up. Check the /etc/init.d/postgresql file for
details.This is certainly true, as my settings are overridden. I have had a look at
this file, but I am still not clear what environment it is reading when it
sets $PGDATA. Can you clarify where this environment
config file should be (on RedHat)?
I can't speak for RedHat, but this is a general description of what happens
at boot time, which may help you to work out what is happening:
after the kernel starts running it starts a program called init, which is
responsible for setting up the multi-user environment and all services,
either directly or indeirectly. At one point in the process, the system
changes into multi-user mode and runs the scripts for the default run-level.
These scripts are usually linked to files in /etc/init.d/.
All this is done with the permissions and identity of the Unix superuser,
so it is necessary for the postgresql startup script to arrange to become
the postgresql superuser to start the postmaster (which root is not
allowed to do). The command to change identity is su, and it makes a
difference whether the script uses `su postgres' or `su - postgres'; the
latter should set up the postgres login environment, but the former will not.
2) Passing parameters to postmaster during starup
Also, the init.d script uses pg_ctl to start the postmaster. I need to pass
the -i parameter using the "postmaster" utility. (As I understand it, in
past releases of these
RPMs -i was set as a default). At what point in the startup sequence can you
pass "postmaster" utility params to the postmaster process?
Another way to do this is to set options in postgresql.conf; have a line
in it that says:
TCPIP_SOCKET = yes
almost all options can be set there. See Administrator's Guide (7.1 version)
section 3.4
--
Oliver Elphick Oliver.Elphick@lfix.co.uk
Isle of Wight http://www.lfix.co.uk/oliver
PGP: 1024R/32B8FAA1: 97 EA 1D 47 72 3F 28 47 6B 7E 39 CC 56 E4 C1 47
GPG: 1024D/3E1D0C1C: CA12 09E0 E8D5 8870 5839 932A 614D 4C34 3E1D 0C1C
========================================
"Submit yourselves therefore to God. Resist the devil,
and he will flee from you." James 4:7