Обсуждение: pg_restore --format= option(without any value) should report an error as pg_dump is reporting an error
pg_restore --format= option(without any value) should report an error as pg_dump is reporting an error
От
Mahendra Singh Thalor
Дата:
Hi,
With "pg_restore --format=", we are not giving any error because in code, we are checking length of arg but pg_dump is reporting an error for the same option.
For the consistency purpose, pg_dump and pg_restore both should report an error for the test case below.
Ex: (output after this patch)but before this patch, below command is passing.
/pg_restore x1 -d postgres -j 10 -C --verbose --format=
pg_restore: error: unrecognized archive format ""; please specify "c", "d", or "t"
pg_restore: error: unrecognized archive format ""; please specify "c", "d", or "t"
Here, I am attaching a patch which is fixing the same. I added 2 TAP tests also for invalid options.
Note: We have 2 more options in pg_restore code which validate the option if arg has non zero length. I will prepare patches for both(--host and --port). We need to add some validate function also for both these options.
Вложения
Re: pg_restore --format= option(without any value) should report an error as pg_dump is reporting an error
От
Mahendra Singh Thalor
Дата:
On Sun, 13 Apr 2025 at 18:32, Mahendra Singh Thalor <mahi6run@gmail.com> wrote: > > Hi, > With "pg_restore --format=", we are not giving any error because in code, we are checking length of arg but pg_dump isreporting an error for the same option. > > For the consistency purpose, pg_dump and pg_restore both should report an error for the test case below. > > Ex: (output after this patch)but before this patch, below command is passing. > /pg_restore x1 -d postgres -j 10 -C --verbose --format= > pg_restore: error: unrecognized archive format ""; please specify "c", "d", or "t" > > Here, I am attaching a patch which is fixing the same. I added 2 TAP tests also for invalid options. > > Note: We have 2 more options in pg_restore code which validate the option if arg has non zero length. I will prepare patchesfor both(--host and --port). We need to add some validate function also for both these options. > > -- > Thanks and Regards > Mahendra Singh Thalor > EnterpriseDB: http://www.enterprisedb.com Hi all, Here I am attaching a re-based patch. I think we should sync behaviour with pg_dump and pg_restore. Please review this patch and let me know feedback. -- Thanks and Regards Mahendra Singh Thalor EnterpriseDB: http://www.enterprisedb.com
Вложения
Re: pg_restore --format= option(without any value) should report an error as pg_dump is reporting an error
От
Srinath Reddy Sadipiralla
Дата:
On Sun, Mar 15, 2026 at 9:48 AM Mahendra Singh Thalor <mahi6run@gmail.com> wrote:
On Sun, 13 Apr 2025 at 18:32, Mahendra Singh Thalor <mahi6run@gmail.com> wrote:
>
> Hi,
> With "pg_restore --format=", we are not giving any error because in code, we are checking length of arg but pg_dump is reporting an error for the same option.
>
> For the consistency purpose, pg_dump and pg_restore both should report an error for the test case below.
>
> Ex: (output after this patch)but before this patch, below command is passing.
> /pg_restore x1 -d postgres -j 10 -C --verbose --format=
> pg_restore: error: unrecognized archive format ""; please specify "c", "d", or "t"
>
> Here, I am attaching a patch which is fixing the same. I added 2 TAP tests also for invalid options.
>
> Note: We have 2 more options in pg_restore code which validate the option if arg has non zero length. I will prepare patches for both(--host and --port). We need to add some validate function also for both these options.
>
> --
> Thanks and Regards
> Mahendra Singh Thalor
> EnterpriseDB: http://www.enterprisedb.com
Hi all,
Here I am attaching a re-based patch.
I think we should sync behaviour with pg_dump and pg_restore. Please
review this patch and let me know feedback.
+1 , patch LGTM, i think this also needs backpatching,
but i think in the TAP test, change the test_name from pg_dump to pg_restore.
diff --git a/src/bin/pg_dump/t/001_basic.pl b/src/bin/pg_dump/t/001_basic.pl
index bf661910c66..3914fb158c2 100755
--- a/src/bin/pg_dump/t/001_basic.pl
+++ b/src/bin/pg_dump/t/001_basic.pl
@@ -204,12 +204,12 @@ command_fails_like(
command_fails_like(
[ 'pg_restore', '-f -', '--format='],
qr/\Qpg_restore: error: unrecognized archive format "";\E/,
- 'pg_dump: unrecognized archive format empty string');
+ 'pg_restore: unrecognized archive format empty string');
command_fails_like(
[ 'pg_restore', '-f -', '-F', 'p' ],
qr/\Qpg_restore: error: archive format "p" is not supported; please use psql\E/,
- 'pg_dump: unrecognized archive format p|plain');
+ 'pg_restore: unrecognized archive format p|plain');
command_fails_like(
[ 'pg_dump', '--on-conflict-do-nothing' ],
On 2026-03-15 Su 12:18 AM, Mahendra Singh Thalor wrote:
On Sun, 13 Apr 2025 at 18:32, Mahendra Singh Thalor <mahi6run@gmail.com> wrote:Hi, With "pg_restore --format=", we are not giving any error because in code, we are checking length of arg but pg_dump is reporting an error for the same option. For the consistency purpose, pg_dump and pg_restore both should report an error for the test case below. Ex: (output after this patch)but before this patch, below command is passing. /pg_restore x1 -d postgres -j 10 -C --verbose --format= pg_restore: error: unrecognized archive format ""; please specify "c", "d", or "t" Here, I am attaching a patch which is fixing the same. I added 2 TAP tests also for invalid options. Note: We have 2 more options in pg_restore code which validate the option if arg has non zero length. I will prepare patches for both(--host and --port). We need to add some validate function also for both these options. -- Thanks and Regards Mahendra Singh Thalor EnterpriseDB: http://www.enterprisedb.comHi all, Here I am attaching a re-based patch. I think we should sync behaviour with pg_dump and pg_restore. Please review this patch and let me know feedback.
Let's try to deal with all these in one hit, instead if piecemeal.
cheers
andrew
-- Andrew Dunstan EDB: https://www.enterprisedb.com
Re: pg_restore --format= option(without any value) should report an error as pg_dump is reporting an error
От
Mahendra Singh Thalor
Дата:
On Sun, 15 Mar 2026 at 22:01, Andrew Dunstan <andrew@dunslane.net> wrote: > > > On 2026-03-15 Su 12:18 AM, Mahendra Singh Thalor wrote: > > On Sun, 13 Apr 2025 at 18:32, Mahendra Singh Thalor <mahi6run@gmail.com> wrote: > > Hi, > With "pg_restore --format=", we are not giving any error because in code, we are checking length of arg but pg_dump isreporting an error for the same option. > > For the consistency purpose, pg_dump and pg_restore both should report an error for the test case below. > > Ex: (output after this patch)but before this patch, below command is passing. > /pg_restore x1 -d postgres -j 10 -C --verbose --format= > pg_restore: error: unrecognized archive format ""; please specify "c", "d", or "t" > > Here, I am attaching a patch which is fixing the same. I added 2 TAP tests also for invalid options. > > Note: We have 2 more options in pg_restore code which validate the option if arg has non zero length. I will prepare patchesfor both(--host and --port). We need to add some validate function also for both these options. > > -- > Thanks and Regards > Mahendra Singh Thalor > EnterpriseDB: http://www.enterprisedb.com > > Hi all, > Here I am attaching a re-based patch. > > I think we should sync behaviour with pg_dump and pg_restore. Please > review this patch and let me know feedback. > > > > Let's try to deal with all these in one hit, instead if piecemeal. > > > cheers > > > andrew > > -- > Andrew Dunstan > EDB: https://www.enterprisedb.com Thanks Srinath and Andrew for the review and feedback. Here, I am attaching an updated patch for the review. I removed the length check for host, port and format in pg_restore as we don't have check in pg_dump also. I think we don't need any test cases for host and port. If we want to backpatch, then I can make patches for back branches but as of now, I am uploading a patch for master only. -- Thanks and Regards Mahendra Singh Thalor EnterpriseDB: http://www.enterprisedb.com
Вложения
On Sun, Mar 15, 2026 at 10:32:11PM +0530, Mahendra Singh Thalor wrote: > Here, I am attaching an updated patch for the review. I removed the > length check for host, port and format in pg_restore as we don't have > check in pg_dump also. Looks generally reasonable to me. > I think we don't need any test cases for host and port. Why not? > If we want to backpatch, then I can make patches for back branches but > as of now, I am uploading a patch for master only. -1 for back-patching. --format seems to have been broken since pg_restore was first committed in 2000 (commit 500b62b057), so I don't sense any urgency here. Not to mention that someone might be relying on the current behavior. > +command_fails_like( > + [ 'pg_restore', '-f -', '-F', 'p' ], > + qr/\Qpg_restore: error: archive format "p" is not supported; please use psql\E/, > + 'pg_restore: unrecognized archive format p|plain'); How does this test relate to this change? -- nathan
Re: pg_restore --format= option(without any value) should report an error as pg_dump is reporting an error
От
Mahendra Singh Thalor
Дата:
Thanks Nathan for the review and feedback.
On Tue, 17 Mar 2026 at 01:04, Nathan Bossart <nathandbossart@gmail.com> wrote:
>
> On Sun, Mar 15, 2026 at 10:32:11PM +0530, Mahendra Singh Thalor wrote:
> > Here, I am attaching an updated patch for the review. I removed the
> > length check for host, port and format in pg_restore as we don't have
> > check in pg_dump also.
>
> Looks generally reasonable to me.
>
> > I think we don't need any test cases for host and port.
>
> Why not?
I did some more testing and found that if there is an empty string with --port/--host, then we don't report any error because we don't validate empty strings. This looks weird to me but this is happening with all tools so I was not adding any test case for --host and --port.
Please see the test cases.
test case1: ./psql -d postgres --port
./psql: option '--port' requires an argument
test case 2: ./psql -d postgres --port=
On Tue, 17 Mar 2026 at 01:04, Nathan Bossart <nathandbossart@gmail.com> wrote:
>
> On Sun, Mar 15, 2026 at 10:32:11PM +0530, Mahendra Singh Thalor wrote:
> > Here, I am attaching an updated patch for the review. I removed the
> > length check for host, port and format in pg_restore as we don't have
> > check in pg_dump also.
>
> Looks generally reasonable to me.
>
> > I think we don't need any test cases for host and port.
>
> Why not?
I did some more testing and found that if there is an empty string with --port/--host, then we don't report any error because we don't validate empty strings. This looks weird to me but this is happening with all tools so I was not adding any test case for --host and --port.
Please see the test cases.
test case1: ./psql -d postgres --port
./psql: option '--port' requires an argument
psql: hint: Try "psql --help" for more information.
psql (19devel)
Type "help" for help.
postgres=# \q
test case 3: ./psql -d postgres --port= 9
psql: error: connection to server on socket "/tmp/.s.PGSQL.5432" failed: FATAL: role "9" does not exist
Type "help" for help.
postgres=# \q
test case 3: ./psql -d postgres --port= 9
psql: error: connection to server on socket "/tmp/.s.PGSQL.5432" failed: FATAL: role "9" does not exist
In case 2 and 3, empty string is considered as valid value for --port and the same is happening with --host and other options also. I think we should add checks for all the tools to validate empty strings (tools should report errors as value is required with these arguments.)
Please add your opinion.
>
> > If we want to backpatch, then I can make patches for back branches but
> > as of now, I am uploading a patch for master only.
>
> -1 for back-patching. --format seems to have been broken since pg_restore
> was first committed in 2000 (commit 500b62b057), so I don't sense any
> urgency here. Not to mention that someone might be relying on the current
> behavior.
Okay. I agree with you.
> > +command_fails_like(
> > + [ 'pg_restore', '-f -', '-F', 'p' ],
> > + qr/\Qpg_restore: error: archive format "p" is not supported; please use psql\E/,
> > + 'pg_restore: unrecognized archive format p|plain');
>
> How does this test relate to this change?
>
> --
> nathan
Fixed. I removed this test case from the current patch.
> > If we want to backpatch, then I can make patches for back branches but
> > as of now, I am uploading a patch for master only.
>
> -1 for back-patching. --format seems to have been broken since pg_restore
> was first committed in 2000 (commit 500b62b057), so I don't sense any
> urgency here. Not to mention that someone might be relying on the current
> behavior.
Okay. I agree with you.
> > +command_fails_like(
> > + [ 'pg_restore', '-f -', '-F', 'p' ],
> > + qr/\Qpg_restore: error: archive format "p" is not supported; please use psql\E/,
> > + 'pg_restore: unrecognized archive format p|plain');
>
> How does this test relate to this change?
>
> --
> nathan
Fixed. I removed this test case from the current patch.
Here, I am attaching an updated patch.
Вложения
On Tue, Mar 17, 2026 at 02:51:56PM +0530, Mahendra Singh Thalor wrote: > I did some more testing and found that if there is an empty string with > --port/--host, then we don't report any error because we don't validate > empty strings. This looks weird to me but this is happening with all tools > so I was not adding any test case for --host and --port. Oh, weird. Unless new feedback materializes, I'll proceed with committing your patch within the next day or so. -- nathan
Committed. -- nathan
Re: pg_restore --format= option(without any value) should report an error as pg_dump is reporting an error
От
Mahendra Singh Thalor
Дата:
Thanks Nathan for committing this.
On Thu, 19 Mar 2026 at 12:54 AM, Nathan Bossart <nathandbossart@gmail.com> wrote:
Committed.
--
nathan