'pg_ctl -w' times out when unix_socket_directory is set
When I have "unix_socket_directory" set to an alternate value, "pg_ctl -
D data -w start" times out. If I set it to default, it works fine.
I'm using postgresql 8.1.4 on FreeBSD.
Perhaps pg_ctl is waiting to see the socket file in /tmp/ before
reporting that postgresql successfully started?
Regards,
Jeff Davis
On Wed, 2006-09-27 at 14:26 -0700, Jeff Davis wrote:
When I have "unix_socket_directory" set to an alternate value, "pg_ctl -
D data -w start" times out. If I set it to default, it works fine.I'm using postgresql 8.1.4 on FreeBSD.
Perhaps pg_ctl is waiting to see the socket file in /tmp/ before
reporting that postgresql successfully started?
I took a look at the source quickly (as usual, the postgres source is so
easy to read I should have looked before I posted) and I found that the
problem seems to be in test_postmaster_connection() in pg_ctl.c.
The function checks for a non-default port, including scanning the
configuration file, but does not look for a non-default socket
directory.
It seems reasonable to add a check to find the real socket directory
before trying the connection.
I have attached a patch. I wrote it very quickly, but it seems to work
as I expect.
Regards,
Jeff Davis
Attachments:
pg_ctl.c.patchtext/x-patch; charset=utf-8; name=pg_ctl.c.patchDownload+36-1
Jeff Davis <pgsql@j-davis.com> writes:
I have attached a patch. I wrote it very quickly, but it seems to work
as I expect.
I don't think this is very workable as a postgresql.conf parser ...
at minimum it needs to handle quoted strings correctly, and really it
ought to deal with file inclusions.
There are other reasons why pg_ctl needs to look at
postgresql.conf --- it currently fails to cope with
config-file-outside-the-datadir cases, and that can't be fixed except by
extracting the data_directory setting from the config file. What we
probably need to do is port guc-file.l into the pg_ctl environment.
(Not sure if it's feasible to use a single source file for both cases,
though that would be nice if not too messy.)
regards, tom lane
On Thu, 2006-09-28 at 10:05 -0400, Tom Lane wrote:
Jeff Davis <pgsql@j-davis.com> writes:
I have attached a patch. I wrote it very quickly, but it seems to work
as I expect.I don't think this is very workable as a postgresql.conf parser ...
at minimum it needs to handle quoted strings correctly, and really it
ought to deal with file inclusions.There are other reasons why pg_ctl needs to look at
postgresql.conf --- it currently fails to cope with
config-file-outside-the-datadir cases, and that can't be fixed except by
extracting the data_directory setting from the config file. What we
probably need to do is port guc-file.l into the pg_ctl environment.
(Not sure if it's feasible to use a single source file for both cases,
though that would be nice if not too messy.)
And same for reading the port out of postgresql.conf, right?
I was a little skeptical that the function would always work. However,
to the extent that it looked for the correct port, it makes sense it
should look at the correct unix_socket_directory also. I think my patch
handles the simplest cases correctly (a simple single-quoted string),
and I don't think it breaks anything.
I can understand that we want a more correct solution to search for both
parameters.
I could make an attempt to port guc-file.l. However, if you were
planning on fixing this for 8.2, I can't make any guarantees. It does
seem like a bug to me, especially since the FreeBSD port of postgres
uses pg_ctl -w in the startup script (and probably a lot of other
platforms).
Regards,
Jeff Davis