Обсуждение: pg_ctl -w vs unix_socket_directory
Hello,
"pg_ctl -w -D ... start" doesn't work when unix_socket_directory is set
to somewhere else than the compiled in default ("/tmp"). Having this is
useful for the startup scripts, so the status "DONE" actually means
success, instead of "maybe".
Jeff Davis wrote about it a while ago:
http://svr5.postgresql.org/pgsql-general/2006-09/msg01141.php
Simple hacky patch for v8.2.5; maybe someone finds it useful before
the proper config parser is integrated:
http://cvs.pld-linux.org/cgi-bin/cvsweb/SOURCES/postgresql-pg_ctl-fix.patch?rev=HEAD
--
Radosław Zieliński <radek@pld-linux.org>
This has a trivial workaround - just set PGHOST for pg_ctl:
[andrew@constanza inst.codfix.5705]$
PGHOST=/home/andrew/pgl/inst.codfix.5705 bin/pg_ctl -D data/ -l logfile
-w start
waiting for server to start.... done
server started
[andrew@constanza inst.codfix.5705]$
cheers
andrew
Radoslaw Zielinski wrote:
> Hello,
>
> "pg_ctl -w -D ... start" doesn't work when unix_socket_directory is set
> to somewhere else than the compiled in default ("/tmp"). Having this is
> useful for the startup scripts, so the status "DONE" actually means
> success, instead of "maybe".
>
> Jeff Davis wrote about it a while ago:
> http://svr5.postgresql.org/pgsql-general/2006-09/msg01141.php
>
>
> Simple hacky patch for v8.2.5; maybe someone finds it useful before
> the proper config parser is integrated:
> http://cvs.pld-linux.org/cgi-bin/cvsweb/SOURCES/postgresql-pg_ctl-fix.patch?rev=HEAD
>
>
Andrew Dunstan <andrew@dunslane.net> [18-09-2007 23:42]: > This has a trivial workaround - just set PGHOST for pg_ctl: > [andrew@constanza inst.codfix.5705]$ > PGHOST=/home/andrew/pgl/inst.codfix.5705 bin/pg_ctl -D data/ -l logfile -w > start That would be fine for a particular installation, but isn't really suitable for a startup script shipped with a linux distribution. Sure, a /bin/sh-based postgresql.conf parser could do the trick... but I just don't feel like writing one. :-) -- Radosław Zieliński <radek@pld-linux.org>
Radoslaw Zielinski <radek42@gmail.com> writes:
> "pg_ctl -w -D ... start" doesn't work when unix_socket_directory is set
> to somewhere else than the compiled in default ("/tmp").
pg_ctl not working is going to be the very least of your worries;
pretty much nothing else will either.
If you want some other socket directory, I strongly recommend setting
the path to it at compile time so that it's properly wired into libpq.
AFAICS the only value in specifying unix_socket_directory at server
start is if you actually *want* a stealth server that won't be found
by clients without manual intervention.
regards, tom lane
Radoslaw Zielinski wrote: > Andrew Dunstan <andrew@dunslane.net> [18-09-2007 23:42]: > >> This has a trivial workaround - just set PGHOST for pg_ctl: >> > > >> [andrew@constanza inst.codfix.5705]$ >> PGHOST=/home/andrew/pgl/inst.codfix.5705 bin/pg_ctl -D data/ -l logfile -w >> start >> > > That would be fine for a particular installation, but isn't really > suitable for a startup script shipped with a linux distribution. Sure, > a /bin/sh-based postgresql.conf parser could do the trick... but I just > don't feel like writing one. :-) > > I think it's broken for a distro to ship with config files setting a socket dir other than the one they compile in. If you don't like /tmp compile in something else. The you don't need to parse anything. cheers andrew
On 19/09/2007, Andrew Dunstan <andrew@dunslane.net> wrote: > Radoslaw Zielinski wrote: [...] > > That would be fine for a particular installation, but isn't really > > suitable for a startup script shipped with a linux distribution. Sure, [...] > I think it's broken for a distro to ship with config files setting a > socket dir other than the one they compile in. The distro uses the default, of course. The issue is: the startup script stops working if a sysadmin changes it manually, for whatever reason.
On 19/09/2007, Tom Lane <tgl@sss.pgh.pa.us> wrote:
> Radoslaw Zielinski <radek42@gmail.com> writes:
> > "pg_ctl -w -D ... start" doesn't work when unix_socket_directory is set
> > to somewhere else than the compiled in default ("/tmp").
> pg_ctl not working is going to be the very least of your worries;
> pretty much nothing else will either.
> If you want some other socket directory, I strongly recommend setting
[...]
I don't want any other socket directory. All I want is a way to
create a working startup script: able to start/stop the server
regardless of changes in postgresql.conf and report the success or
failure.
On Tue, 2007-09-18 at 19:13 -0400, Tom Lane wrote:
> Radoslaw Zielinski <radek42@gmail.com> writes:
> > "pg_ctl -w -D ... start" doesn't work when unix_socket_directory is set
> > to somewhere else than the compiled in default ("/tmp").
>
> pg_ctl not working is going to be the very least of your worries;
> pretty much nothing else will either.
>
If you mean client applications won't work, that would be expected from
such a change to the server configuration.
> If you want some other socket directory, I strongly recommend setting
> the path to it at compile time so that it's properly wired into libpq.
> AFAICS the only value in specifying unix_socket_directory at server
> start is if you actually *want* a stealth server that won't be found
> by clients without manual intervention.
>
Those arguments apply almost as well to the server port. The server port
is read from the postgresql.conf from pg_ctl, but not the socket
directory.
It's an annoyance: if you change the default socket directory, you're
probably going to break your init script (on FreeBSD you will, because
it uses "-w"). I don't think that's the expected result, and it's not
intuitive to find the cause of the problem.
I think the inconsistency between server port number and socket
directory is less than ideal. However, I also don't feel very strongly
about it. It's rare, and a there are plenty of workarounds.
Regards,Jeff Davis