Re: [BUGS] 'pg_ctl restart' confused about pathname to postgresql.conf

2012-08-16 Thread Bruce Momjian

I have applied the attached doc patch to document the problem with
relative paths and pg_ctl restart.

---

On Sun, Oct 23, 2011 at 08:49:25PM -0400, Josh Kupershmidt wrote:
> On Sat, Oct 22, 2011 at 12:13 PM, Tom Lane  wrote:
> > I think the reason it has a problem is that this is what's left in
> > postmaster.opts:
> >
> > /home/tgl/pgsql/bin/postgres "-D" "baz"
> >
> > (which is an accurate representation of the command line from startup)
> > and that -D switch gets fed to the postmaster as-is during restart.
> 
> I see.
> 
> > By and large, I would not recommend using a relative pathname to start
> > the postmaster, unless you plan to start it from the same working
> > directory every time.
> 
> Well, now I know. But that really seems like an annoying and arbitrary
> restriction, not to mention not being documented anywhere AFAICT.
> 
> (I came upon this problem because I often set up servers with
> binaries, libraries, and $PGDATA all tucked away under
> /home/postgres/, and it seemed natural to use a relative pathname as
> my data directory argument to pg_ctl since my working directory will
> usually be /home/postgres/ when I'm poking at the server.)
> 
> > We could possibly avoid this by having pg_ctl try to absolute-ify the -D
> > setting during postmaster start, but I'm not convinced it's worth the
> > trouble, or even that it's appropriate for pg_ctl to editorialize on the
> > user's choice of absolute vs relative path.
> 
> I don't want to bikeshed on the mechanics of how exactly this should
> work, but it doesn't seem like it should be so hard to get this to
> DWIM. In the example I posted, the last step which fails is basically:
> 
>   pg_ctl -D /tmp/foo/bar/baz/ restart
> 
> and it just seems totally broken for that to not work: pg_ctl knows
> exactly which data directory the user means when invoked here. Plus,
> these steps would work fine instead at that point:
> 
>   pg_ctl -D /tmp/foo/bar/baz/ stop
>   pg_ctl -D /tmp/foo/bar/baz/ start
> 
> and I was under the impression (supported by the pg_ctl doc page,
> which claims "restart mode effectively executes a stop followed by a
> start") that these sequences should be equivalent.

-- 
  Bruce Momjian  http://momjian.us
  EnterpriseDB http://enterprisedb.com

  + It's impossible for everything to be true. +
diff --git a/doc/src/sgml/ref/pg_ctl-ref.sgml b/doc/src/sgml/ref/pg_ctl-ref.sgml
new file mode 100644
index 7a4c2be..3107514
*** a/doc/src/sgml/ref/pg_ctl-ref.sgml
--- b/doc/src/sgml/ref/pg_ctl-ref.sgml
*** PostgreSQL documentation
*** 188,194 

 restart mode effectively executes a stop followed
 by a start.  This allows changing the postgres
!command-line options.

  

--- 188,196 

 restart mode effectively executes a stop followed
 by a start.  This allows changing the postgres
!command-line options.  restart might fail if
!relative paths specified were specified on the command-line during
!server start.

  


-- 
Sent via pgsql-bugs mailing list (pgsql-bugs@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-bugs


Re: [BUGS] 'pg_ctl restart' confused about pathname to postgresql.conf

2011-10-23 Thread Josh Kupershmidt
On Sat, Oct 22, 2011 at 12:13 PM, Tom Lane  wrote:
> I think the reason it has a problem is that this is what's left in
> postmaster.opts:
>
> /home/tgl/pgsql/bin/postgres "-D" "baz"
>
> (which is an accurate representation of the command line from startup)
> and that -D switch gets fed to the postmaster as-is during restart.

I see.

> By and large, I would not recommend using a relative pathname to start
> the postmaster, unless you plan to start it from the same working
> directory every time.

Well, now I know. But that really seems like an annoying and arbitrary
restriction, not to mention not being documented anywhere AFAICT.

(I came upon this problem because I often set up servers with
binaries, libraries, and $PGDATA all tucked away under
/home/postgres/, and it seemed natural to use a relative pathname as
my data directory argument to pg_ctl since my working directory will
usually be /home/postgres/ when I'm poking at the server.)

> We could possibly avoid this by having pg_ctl try to absolute-ify the -D
> setting during postmaster start, but I'm not convinced it's worth the
> trouble, or even that it's appropriate for pg_ctl to editorialize on the
> user's choice of absolute vs relative path.

I don't want to bikeshed on the mechanics of how exactly this should
work, but it doesn't seem like it should be so hard to get this to
DWIM. In the example I posted, the last step which fails is basically:

  pg_ctl -D /tmp/foo/bar/baz/ restart

and it just seems totally broken for that to not work: pg_ctl knows
exactly which data directory the user means when invoked here. Plus,
these steps would work fine instead at that point:

  pg_ctl -D /tmp/foo/bar/baz/ stop
  pg_ctl -D /tmp/foo/bar/baz/ start

and I was under the impression (supported by the pg_ctl doc page,
which claims "restart mode effectively executes a stop followed by a
start") that these sequences should be equivalent.

Josh

-- 
Sent via pgsql-bugs mailing list (pgsql-bugs@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-bugs


Re: [BUGS] 'pg_ctl restart' confused about pathname to postgresql.conf

2011-10-22 Thread Tom Lane
Josh Kupershmidt  writes:
> You can run the test case stand-alone, though it's probably easier to
> see what's going on if you just copy-paste into your terminal: at the
> end you should wind up with your current directory "/tmp/foo/". You
> should see that the last command, "pg_ctl -D $DATADIR restart" failed
> to start the server back up, complaining:
>   postgres cannot access the server configuration file
> "/tmp/foo/baz/postgresql.conf": No such file or directory

> even though $DATADIR is clearly set to "/tmp/foo/bar/baz/" (N.B.
> directory "bar" has gone missing in the above error message). A
> "pg_ctl -D $DATADIR start" should work at this point, though. This
> seems like some bug in normalizing the absolute path to
> postgresql.conf.

I think the reason it has a problem is that this is what's left in
postmaster.opts:

/home/tgl/pgsql/bin/postgres "-D" "baz"

(which is an accurate representation of the command line from startup)
and that -D switch gets fed to the postmaster as-is during restart.

By and large, I would not recommend using a relative pathname to start
the postmaster, unless you plan to start it from the same working
directory every time.

We could possibly avoid this by having pg_ctl try to absolute-ify the -D
setting during postmaster start, but I'm not convinced it's worth the
trouble, or even that it's appropriate for pg_ctl to editorialize on the
user's choice of absolute vs relative path.

regards, tom lane

-- 
Sent via pgsql-bugs mailing list (pgsql-bugs@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-bugs