Re: pg_restore documentation and --create/--single-transaction limitation

From: Ashutosh Bapat <ashutosh(dot)bapat(dot)oss(at)gmail(dot)com>
To: Laurenz Albe <laurenz(dot)albe(at)cybertec(dot)at>
Cc: pgsql-hackers <pgsql-hackers(at)postgresql(dot)org>
Subject: Re: pg_restore documentation and --create/--single-transaction limitation
Date: 2025-09-30 11:31:28
Message-ID: CAExHW5tvMaJupX9c33NqKQ41D-QoDxeYAnnJS580+N690LrA2A@mail.gmail.com
Views: Whole Thread | Raw Message | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

On Tue, Sep 30, 2025 at 3:00 PM Laurenz Albe <laurenz(dot)albe(at)cybertec(dot)at> wrote:
>
> On Mon, 2025-03-24 at 17:11 +0530, Ashutosh Bapat wrote:
> > The pg_restore documentation usually mentions the pair of switches
> > which can not be used together. However, it does not mention that
> > --create and --single-transaction can not be used together. Here's a
> > patch fixing the same.
> >
> > Looking for a precedence, I found that we have mentioned a similar
> > limitation concerning --data-only and --schema-only only under
> > --schema and not at both the sections. Maybe it's missing or we chose
> > to mention it only at one place. But then I am not sure which one
> > place I should use to mention the new limitation. So, I have added the
> > note in the sections corresponding to both the switches so that a user
> > reading either of them knows about the limitation.
>
> I grepped the source for all incompatible options:
>
> pg_log_error("options -d/--dbname and -f/--file cannot be used together");
> pg_fatal("options -d/--dbname and --restrict-key cannot be used together");
> pg_fatal("options -s/--schema-only and -a/--data-only cannot be used together");
> pg_fatal("options -s/--schema-only and --statistics-only cannot be used together");
> pg_fatal("options -a/--data-only and --statistics-only cannot be used together");
> pg_fatal("options -a/--data-only and --no-data cannot be used together");
> pg_fatal("options -s/--schema-only and --no-schema cannot be used together");
> pg_fatal("options --statistics-only and --no-statistics cannot be used together");
> pg_fatal("options --statistics and --no-statistics cannot be used together");
> pg_fatal("options %s and %s cannot be used together",
> "-a/--data-only", "--statistics");
> pg_fatal("options %s and %s cannot be used together",
> "-s/--schema-only", "--statistics");
> pg_fatal("options -c/--clean and -a/--data-only cannot be used together");
> pg_fatal("options -1/--single-transaction and --transaction-size cannot be used together");
> pg_fatal("options -C/--create and -1/--single-transaction cannot be used together");
> pg_fatal("cannot specify both --single-transaction and multiple jobs");
>
> Most of them are pretty obvious and need no documentation. The ones
> that are not obvious unless you know the inner workings are that last
> two, and the last one is already documented under --jobs.

Thanks a lot for the research and pointing out missing --jobs.

>
> So I think that your suggestion makes sense.
>
> I tried to improve the English, and I have added the incompatibility
> with multiple --jobs to the --single-transaction documentation.
>
> Does that look alright to you?

@@ -541,7 +545,9 @@ PostgreSQL documentation
emitted commands in <command>BEGIN</command>/<command>COMMIT</command>). This
ensures that either all the commands complete successfully, or no
changes are applied. This option implies
- <option>--exit-on-error</option>.
+ <option>--exit-on-error</option>. It cannot be used together with
+ <option>--create</option>, which switches database connections, or with

I didn't understand ", which switches ..." part. The code comment says
/*
* -C is not compatible with -1, because we can't create a database inside
* a transaction block.
*/
if (opts->createDB && opts->single_txn)
pg_fatal("options -C/--create and -1/--single-transaction cannot be
used together");

It doesn't say anything about switching connections. But it's too low
level of detail, which we may just eliminate.

+ multiple <option>--jobs</option>.

This seems to be confusing. I read it as --single-transaction can not
be used when there are multiple --jobs specifications e.g.
--single-transaction --jobs 1 --jobs 2. Maybe just say " multiple
jobs". Even corresponding --jobs documentation says

pipe or standard input). Also, multiple
jobs cannot be used together with the
option <option>--single-transaction</option>.

Attached patch with those changes.

--
Best Wishes,
Ashutosh Bapat

Attachment Content-Type Size
0001-Document-more-incompatible-pg_restore-optio-20250930.patch text/x-patch 1.9 KB

In response to

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Dilip Kumar 2025-09-30 11:40:33 Re: pgstattuple "unexpected zero page" for gist and hash indexes
Previous Message David Rowley 2025-09-30 11:25:28 Re: Wordsmith pgstat_relation.c header comment