Thread: Warn if initdb's --sync-only option is mixed with other options

Warn if initdb's --sync-only option is mixed with other options

From
Gurjeet Singh
Date:
When reading through code for my previous patch [1] I realized that
initdb does *not* warn users that it ignores all other options (except
-D/--pgdata) if the --sync-only option is used.

I'm not able to come up with an exact situation to prove this, but
this behaviour seems potentially dangerous. The user might mix the
--sync-only option with other options, but would be extremely
surprised if those other options didn't take effect.

I _think_ we should throw an error if the user specifies any options
that are being ignored. But an error might break someone's automation
(perhaps for their own good), since the current behaviour has been in
place for a very long time, so I'm willing to settle for at least a
warning in such a case.

[1]:
Slightly improve initdb --sync-only option's help message
https://www.postgresql.org/message-id/CABwTF4U6hbNNE1bv%3DLxQdJybmUdZ5NJQ9rKY9tN82NXM8QH%2BiQ%40mail.gmail.com

Best regards,
--
Gurjeet Singh http://gurjeet.singh.im/

Attachment

Re: Warn if initdb's --sync-only option is mixed with other options

From
Daniel Gustafsson
Date:
> On 7 Jul 2021, at 04:23, Gurjeet Singh <gurjeet@singh.im> wrote:

> I'm not able to come up with an exact situation to prove this, but
> this behaviour seems potentially dangerous. The user might mix the
> --sync-only option with other options, but would be extremely
> surprised if those other options didn't take effect.

Is if there is a plausible real world situation where a user runs --sync-only
together with other arguments and also miss the fact that the other arguments
didn't take effect, and have bad consequences?

> I _think_ we should throw an error if the user specifies any options
> that are being ignored. But an error might break someone's automation
> (perhaps for their own good), since the current behaviour has been in
> place for a very long time, so I'm willing to settle for at least a
> warning in such a case.

We typically don't issue warnings for incompatible arguments, but rather error
out, and I'm not convinced this warrants breaking that.  If we are going to do
anything I think we should error out; if we decide to do something then we
consider the scripts that will break to already be broken.

A slightly confusing aspect of this is however the error message for sync-only
when -D or PGDATA isn't set says "will reside" when in fact it should say "is
residing" (or something along those lines):

  $ ./bin/initdb --sync-only
  initdb: error: no data directory specified
  You must identify the directory where the data for this database system
  will reside.  Do this with either the invocation option -D or the
  environment variable PGDATA.

I doubt it's worth complicating the code for this fringe case though.

--
Daniel Gustafsson        https://vmware.com/




Re: Warn if initdb's --sync-only option is mixed with other options

From
Daniel Gustafsson
Date:
> On 7 Jul 2021, at 15:25, Daniel Gustafsson <daniel@yesql.se> wrote:

> I doubt it's worth complicating the code for this fringe case though.

This thread has stalled, and with the updated docs/help output done for this
option I don't think this is worth pursuing (especially given the lack of
complaints over behavior which has existed for a very long time).  I'm marking
this returned with feedback.

--
Daniel Gustafsson        https://vmware.com/