Обсуждение: BUG #19042: Option --help not recognized at the end of command line in pg_restore
BUG #19042: Option --help not recognized at the end of command line in pg_restore
От
 
		    	PG Bug reporting form
		    Дата:
		        The following bug has been logged on the website: Bug reference: 19042 Logged by: Matthias Hörmann Email address: matthias.hoermann@saltation.com PostgreSQL version: 17.6 Operating system: Debian bookworm Description: When calling pg_restore trying to use --help at the end to see which other options I might want to specify tells me that --help is an unrecognized option and I am supposed to run pg_restore --help for more information. ``` # pg_restore --version pg_restore (PostgreSQL) 17.6 (Debian 17.6-1.pgdg12+1) # sudo -u postgres pg_restore -f /tmp/redacted_20250903_130108.pg_dump --help /usr/lib/postgresql/17/bin/pg_restore: unrecognized option '--help' pg_restore: hint: Try "pg_restore --help" for more information. ```
Re: BUG #19042: Option --help not recognized at the end of command line in pg_restore
От
 
		    	Daniel Gustafsson
		    Дата:
		        > On 3 Sep 2025, at 13:07, PG Bug reporting form <noreply@postgresql.org> wrote: > When calling pg_restore trying to use --help at the end to see which other > options I might want to specify tells me that --help is an unrecognized > option and I am supposed to run pg_restore --help for more information. This is the intended behaviour, --help (and --version) is parsed specially and must be the first parameter. We do this for all command line utilities. -- Daniel Gustafsson
Re: BUG #19042: Option --help not recognized at the end of command line in pg_restore
От
 
		    	Matthias Hörmann
		    Дата:
		        The 2025-09-03 13:45:15, Daniel Gustafsson wrote: > > On 3 Sep 2025, at 13:07, PG Bug reporting form <noreply@postgresql.org> wrote: > > > When calling pg_restore trying to use --help at the end to see which other > > options I might want to specify tells me that --help is an unrecognized > > option and I am supposed to run pg_restore --help for more information. > > This is the intended behaviour, --help (and --version) is parsed specially and > must be the first parameter. We do this for all command line utilities. > > -- > Daniel Gustafsson > Well, the use-case that comes up quite often for me (for any commands, not just postgres) is that I add parameters I know or remember from my last look at --help and then want to check again what else to add, for that it is useful to be able to use --help as the last parameter. -- Mit freundlichen Grüßen, Matthias Hörmann fon: +49 (0) 521 - 329647-29 fax: +49 (0) 521 - 329647-40 email: matthias.hoermann@saltation.com --------------- saltation GmbH & Co. KG | Stapenhorststraße 42b | 33615 Bielefeld Sitz Bielefeld | Amtsgericht Bielefeld HRA 15344 Persönlich haftende Gesellschafterin: saltation Beteiligungs-GmbH | Stapenhorststraße 42b | 33615 Bielefeld Sitz Bielefeld | Amtsgericht Bielefeld HRB 39339 Geschäftsführer: Daniel Brün --------------- Wir erfüllen unsere Informationspflichten gem. Artt. 13-14 DS-GVO durch Veröffentlichung auf unserer Internetseite unter https://www.saltation.com/de/datenschutzerklaerung.html oder durch Zusendung auf Ihre formlose Anfrage.
Matthias =?utf-8?Q?H=C3=B6rmann?= <matthias.hoermann@saltation.com> writes:
> The 2025-09-03 13:45:15, Daniel Gustafsson wrote:
>> This is the intended behaviour, --help (and --version) is parsed specially and
>> must be the first parameter. We do this for all command line utilities.
> Well, the use-case that comes up quite often for me (for any commands,
> not just postgres) is that I add parameters I know or remember from my
> last look at --help and then want to check again what else to add, for
> that it is useful to be able to use --help as the last parameter.
FWIW, I agree with this.  While I don't try to do that with PG
utilities (since I know it doesn't work), I frequently rely on that
behavior of our configure script.  I'd be in favor of recognizing
--help (though probably not -?) in any argument position.  Less sure
about --version.
            regards, tom lane
			
		Re: BUG #19042: Option --help not recognized at the end of command line in pg_restore
От
 
		    	Daniel Gustafsson
		    Дата:
		        > On 3 Sep 2025, at 16:57, Tom Lane <tgl@sss.pgh.pa.us> wrote: > > Matthias =?utf-8?Q?H=C3=B6rmann?= <matthias.hoermann@saltation.com> writes: >> The 2025-09-03 13:45:15, Daniel Gustafsson wrote: >>> This is the intended behaviour, --help (and --version) is parsed specially and >>> must be the first parameter. We do this for all command line utilities. > >> Well, the use-case that comes up quite often for me (for any commands, >> not just postgres) is that I add parameters I know or remember from my >> last look at --help and then want to check again what else to add, for >> that it is useful to be able to use --help as the last parameter. > > FWIW, I agree with this. Same here, it's a totally reasonable ask. > I'd be in favor of recognizing > --help (though probably not -?) in any argument position. Any particular reason to restrict -? from this? > Less sure about --version. Agreed, I think --version should require being the sole parameter. -- Daniel Gustafsson
Daniel Gustafsson <daniel@yesql.se> writes:
> On 3 Sep 2025, at 16:57, Tom Lane <tgl@sss.pgh.pa.us> wrote:
>> I'd be in favor of recognizing
>> --help (though probably not -?) in any argument position.  
> Any particular reason to restrict -? from this?
I'm not set on that either way.  It just seems like --help is
quite unambiguous and unlikely to be a typo, whereas I'm less
sure about -?.  I won't stand in the way of a consensus to
do this for both.
            regards, tom lane
			
		Re: BUG #19042: Option --help not recognized at the end of command line in pg_restore
От
 
		    	Andres Freund
		    Дата:
		        Hi, On 2025-09-03 10:57:53 -0400, Tom Lane wrote: > Matthias =?utf-8?Q?H=C3=B6rmann?= <matthias.hoermann@saltation.com> writes: > > The 2025-09-03 13:45:15, Daniel Gustafsson wrote: > >> This is the intended behaviour, --help (and --version) is parsed specially and > >> must be the first parameter. We do this for all command line utilities. > > > Well, the use-case that comes up quite often for me (for any commands, > > not just postgres) is that I add parameters I know or remember from my > > last look at --help and then want to check again what else to add, for > > that it is useful to be able to use --help as the last parameter. > > FWIW, I agree with this. While I don't try to do that with PG > utilities (since I know it doesn't work), I frequently rely on that > behavior of our configure script. I'd be in favor of recognizing > --help (though probably not -?) in any argument position. Less sure > about --version. I've been annoyed by this behaviour for a long time. So +many for recognizing --help (and I'd say -?) everywhere, not just as the first argument. I never understood why we don't do that. I don't think the argument for --version is particularly strong from a usability perspective, but I don't see what we gain from parsing --version/-V differently than we do all the other arguments. It seems best to just handle --version the same as all the other arguments. Greetings, Andres
Re: BUG #19042: Option --help not recognized at the end of command line in pg_restore
От
 
		    	Greg Sabino Mullane
		    Дата:
		        On Wed, Sep 3, 2025 at 7:48 AM Matthias Hörmann <matthias.hoermann@saltation.com> wrote:
Well, the use-case that comes up quite often for me (for any commands,
not just postgres) is that I add parameters I know or remember from my
last look at --help and then want to check again what else to add, for
that it is useful to be able to use --help as the last parameter.
Heavy +1 to fix this - it's always been a pet peeve of mine. Postgres tools are not the only ones that do this, but they are definitely an outlier.
Cheers,
Greg
--
Crunchy Data - https://www.crunchydata.com
Enterprise Postgres Software Products & Tech Support
Re: BUG #19042: Option --help not recognized at the end of command line in pg_restore
От
 
		    	Peter Eisentraut
		    Дата:
		        On 03.09.25 21:34, Andres Freund wrote: > So +many for recognizing --help (and I'd say -?) everywhere, not just as the > first argument. I never understood why we don't do that. I think in the olden days we didn't have universal getopt_long() support, so it was hardcoded. I don't see a problem with changing it. > I don't think the argument for --version is particularly strong from a > usability perspective, but I don't see what we gain from parsing --version/-V > differently than we do all the other arguments. It seems best to just handle > --version the same as all the other arguments. Right. If you try the usual GNU utilities, they handle --help and --version at any argument position.
Re: BUG #19042: Option --help not recognized at the end of command line in pg_restore
От
 
		    	Daniel Gustafsson
		    Дата:
		        > On 10 Sep 2025, at 07:26, Peter Eisentraut <peter@eisentraut.org> wrote: > > On 03.09.25 21:34, Andres Freund wrote: >> So +many for recognizing --help (and I'd say -?) everywhere, not just as the >> first argument. I never understood why we don't do that. > > I think in the olden days we didn't have universal getopt_long() support, so it was hardcoded. I don't see a problem withchanging it. That's probably an accurate description. I am writing up a patch to move it into long option processing to see what it would look like, will share soon. -- Daniel Gustafsson
Re: BUG #19042: Option --help not recognized at the end of command line in pg_restore
От
 
		    	Nathan Bossart
		    Дата:
		        On Wed, Sep 10, 2025 at 11:24:36AM +0200, Daniel Gustafsson wrote: > I am writing up a patch to move it into long option processing to see > what it would look like, will share soon. Are you still planning to work on this one? -- nathan
Re: BUG #19042: Option --help not recognized at the end of command line in pg_restore
От
 
		    	Daniel Gustafsson
		    Дата:
		        > On 22 Oct 2025, at 23:23, Nathan Bossart <nathandbossart@gmail.com> wrote: > > On Wed, Sep 10, 2025 at 11:24:36AM +0200, Daniel Gustafsson wrote: >> I am writing up a patch to move it into long option processing to see >> what it would look like, will share soon. > > Are you still planning to work on this one? It's mostly done but got bumped off the TODO due to finalizing talk for PGConf.EU, will send a patch shortly. -- Daniel Gustafsson
Re: BUG #19042: Option --help not recognized at the end of command line in pg_restore
От
 
		    	Daniel Gustafsson
		    Дата:
		        > On 22 Oct 2025, at 23:23, Nathan Bossart <nathandbossart@gmail.com> wrote: > > On Wed, Sep 10, 2025 at 11:24:36AM +0200, Daniel Gustafsson wrote: >> I am writing up a patch to move it into long option processing to see >> what it would look like, will share soon. > > Are you still planning to work on this one? Attached is a v1 which converts all the apps in the tree to allow version and help arguments at any position. There was quite the variety of how the help/version arguments were handled, some apps had partial support in the longopts, some had full support and some had none. The idea was to make handling consistent across the binaries without introducing any dependencies or build time changes. While hacking on this it seemed like a good idea to move to using progname consistently, and reduce scope in some places from global variables, but looking at it now I'm less convinced. At the very least it should be ripped out into its own patch but for now those changes are left in there. It's far from an exciting patchset but it would be nice to get it done once and for all. 0002 is a small change to make sure all apps exit with the same code, I was unable to find a documented rationale for exit(2) so I think it's an oversight. -- Daniel Gustafsson
Вложения
Re: BUG #19042: Option --help not recognized at the end of command line in pg_restore
От
 
		    	Nathan Bossart
		    Дата:
		        On Sat, Oct 25, 2025 at 12:26:01AM +0200, Daniel Gustafsson wrote: > While hacking on this it seemed like a good idea to move to using progname > consistently, and reduce scope in some places from global variables, but > looking at it now I'm less convinced. At the very least it should be ripped > out into its own patch but for now those changes are left in there. Yeah, that does feel like it ought to be its own patch. After a read-through, 0001 looks like the right idea to me, though. It's a larger patch, but the majority of the changes are pretty mechanical. +/* port/pg_option_utils.c */ +extern bool is_help_param(int argc, char *argv[], int optind); And fe_utils/option_utils.c, right (since it has a copy of this function)? Or is the idea to use pg_option_utils.c for both the frontend and the backend? > It's far from an exciting patchset but it would be nice to get it done once and > for all. 0002 is a small change to make sure all apps exit with the same code, > I was unable to find a documented rationale for exit(2) so I think it's an > oversight. 0002 LGTM -- nathan
Re: BUG #19042: Option --help not recognized at the end of command line in pg_restore
От
 
		    	Daniel Gustafsson
		    Дата:
		        > On 27 Oct 2025, at 16:30, Nathan Bossart <nathandbossart@gmail.com> wrote: Thanks for review! > On Sat, Oct 25, 2025 at 12:26:01AM +0200, Daniel Gustafsson wrote: >> While hacking on this it seemed like a good idea to move to using progname >> consistently, and reduce scope in some places from global variables, but >> looking at it now I'm less convinced. At the very least it should be ripped >> out into its own patch but for now those changes are left in there. > > Yeah, that does feel like it ought to be its own patch. Absolutely agree, will move that out in the next version. > After a > read-through, 0001 looks like the right idea to me, though. It's a larger > patch, but the majority of the changes are pretty mechanical. It’s indeed pretty boring, and considering what the patch want to achieve I guess that’s a good thing. > +/* port/pg_option_utils.c */ > +extern bool is_help_param(int argc, char *argv[], int optind); > > And fe_utils/option_utils.c, right (since it has a copy of this function)? > Or is the idea to use pg_option_utils.c for both the frontend and the > backend? I originally placed it in fe_utils but then moved to src/port to avoid adding libpq depesencies where we dont have them today.If there is a second copy then I missed that in my rebase (am travelling without laptop so cant comfortably read patchesright now to check). Not sure what the best option is and how big of a deal it is. Do you have any suggestions? ./daniel
Re: BUG #19042: Option --help not recognized at the end of command line in pg_restore
От
 
		    	Nathan Bossart
		    Дата:
		        On Mon, Oct 27, 2025 at 09:49:06PM +0200, Daniel Gustafsson wrote: > I originally placed it in fe_utils but then moved to src/port to avoid > adding libpq depesencies where we dont have them today. If there is a > second copy then I missed that in my rebase (am travelling without laptop > so cant comfortably read patches right now to check). Not sure what the > best option is and how big of a deal it is. Do you have any suggestions? Oh. Unless my eyes deceive me, I think you forgot to remove the fe_utils one. -- nathan
Re: BUG #19042: Option --help not recognized at the end of command line in pg_restore
От
 
		    	Peter Eisentraut
		    Дата:
		        On 25.10.25 00:26, Daniel Gustafsson wrote: > While hacking on this it seemed like a good idea to move to using progname > consistently, and reduce scope in some places from global variables, but > looking at it now I'm less convinced. At the very least it should be ripped > out into its own patch but for now those changes are left in there. The --version outputs intentionally do not use progname, so that you get a proper identification of the program and version independent of what the binary might be called. Please don't change that.
Peter Eisentraut <peter@eisentraut.org> writes:
> On 25.10.25 00:26, Daniel Gustafsson wrote:
>> While hacking on this it seemed like a good idea to move to using progname
>> consistently, and reduce scope in some places from global variables, but
>> looking at it now I'm less convinced.  At the very least it should be ripped
>> out into its own patch but for now those changes are left in there.
> The --version outputs intentionally do not use progname, so that you get
> a proper identification of the program and version independent of what
> the binary might be called.  Please don't change that.
Hmm, that's important institutional knowledge that should be captured
somewhere.
            regards, tom lane
			
		Re: BUG #19042: Option --help not recognized at the end of command line in pg_restore
От
 
		    	Daniel Gustafsson
		    Дата:
		        > On 29 Oct 2025, at 17:54, Tom Lane <tgl@sss.pgh.pa.us> wrote: > > Peter Eisentraut <peter@eisentraut.org> writes: >>> On 25.10.25 00:26, Daniel Gustafsson wrote: >>> While hacking on this it seemed like a good idea to move to using progname >>> consistently, and reduce scope in some places from global variables, but >>> looking at it now I'm less convinced. At the very least it should be ripped >>> out into its own patch but for now those changes are left in there. > >> The --version outputs intentionally do not use progname, so that you get >> a proper identification of the program and version independent of what >> the binary might be called. Please don't change that. All callsites using handle_help_version_opts were already using progname for —version, this just made it consistent. Thatbeing said, I can change it to be consistent in the other direction. > Hmm, that's important institutional knowledge that should be captured > somewhere. Maybe a README in src/bin? ./daniel
Re: BUG #19042: Option --help not recognized at the end of command line in pg_restore
От
 
		    	Peter Eisentraut
		    Дата:
		        On 29.10.25 21:19, Daniel Gustafsson wrote: > > >> On 29 Oct 2025, at 17:54, Tom Lane <tgl@sss.pgh.pa.us> wrote: >> >> Peter Eisentraut <peter@eisentraut.org> writes: >>>> On 25.10.25 00:26, Daniel Gustafsson wrote: >>>> While hacking on this it seemed like a good idea to move to using progname >>>> consistently, and reduce scope in some places from global variables, but >>>> looking at it now I'm less convinced. At the very least it should be ripped >>>> out into its own patch but for now those changes are left in there. >> >>> The --version outputs intentionally do not use progname, so that you get >>> a proper identification of the program and version independent of what >>> the binary might be called. Please don't change that. > > All callsites using handle_help_version_opts were already using progname for —version, this just made it consistent. Thatbeing said, I can change it to be consistent in the other direction. AFAICT, handle_help_version_opts() does this correctly: It takes an argument fixed_progname that is used for --version output, while for the --help output it uses argv. And most callers provide a fixed string for fixed_progname, but I see that some don't. >> Hmm, that's important institutional knowledge that should be captured >> somewhere. > > Maybe a README in src/bin? Maybe just a better code comment at handle_help_version_opts().