Обсуждение: Refactor handling of "-only" options in pg_dump, pg_restore

Поиск
Список
Период
Сортировка

Refactor handling of "-only" options in pg_dump, pg_restore

От
jian he
Дата:
Hi.

-------------------------------<<<<<<<
    /* reject conflicting "-only" options */
    if (data_only && schema_only)
        pg_fatal("options %s and %s cannot be used together",
                 "-s/--schema-only", "-a/--data-only");
    if (schema_only && statistics_only)
        pg_fatal("options %s and %s cannot be used together",
                 "-s/--schema-only", "--statistics-only");
    if (data_only && statistics_only)
        pg_fatal("options %s and %s cannot be used together",
                 "-a/--data-only", "--statistics-only");

    /* reject conflicting "-only" options */
    if (data_only && with_statistics)
        pg_fatal("options %s and %s cannot be used together",
                 "-a/--data-only", "--statistics");
    if (schema_only && with_statistics)
        pg_fatal("options %s and %s cannot be used together",
                 "-s/--schema-only", "--statistics");
-------------------------------<<<<<<<
The above is from src/bin/pg_dump/pg_dump.c, this is too much.

We can just use two IF statements:
    if (data_only && (schema_only || with_statistics || statistics_only))
        pg_fatal("options %s and %s cannot be used together",
                 "-a/--data-only",
                 schema_only ? "-s/--schema-only" :
                 with_statistics ? "--statistics" :
                 "--statistics-only");

    if (schema_only && (with_statistics || statistics_only))
        pg_fatal("options %s and %s cannot be used together",
                 "-s/--schema-only",
                 with_statistics ? "--statistics" :
                 "--statistics-only");

First "if (data_only && (schema_only" implies that the second IF check
won't have a combination
of `` if (schema_only && (data_only``.
Maybe we can use ELSE IF here.

We can do the same thing for pg_restore.c



--
jian
https://www.enterprisedb.com/

Вложения

Re: Refactor handling of "-only" options in pg_dump, pg_restore

От
Steven Niu
Дата:
From: jian he <jian.universality@gmail.com>
Sent: Monday, March 02, 2026 12:57
To: PostgreSQL-development <pgsql-hackers@postgresql.org>
Subject: Refactor handling of "-only" options in pg_dump, pg_restore


Hi.

-------------------------------<<<<<<<
    /* reject conflicting "-only" options */
    if (data_only && schema_only)
        pg_fatal("options %s and %s cannot be used together",
                 "-s/--schema-only", "-a/--data-only");
    if (schema_only && statistics_only)
        pg_fatal("options %s and %s cannot be used together",
                 "-s/--schema-only", "--statistics-only");
    if (data_only && statistics_only)
        pg_fatal("options %s and %s cannot be used together",
                 "-a/--data-only", "--statistics-only");

    /* reject conflicting "-only" options */
    if (data_only && with_statistics)
        pg_fatal("options %s and %s cannot be used together",
                 "-a/--data-only", "--statistics");
    if (schema_only && with_statistics)
        pg_fatal("options %s and %s cannot be used together",
                 "-s/--schema-only", "--statistics");
-------------------------------<<<<<<<
The above is from src/bin/pg_dump/pg_dump.c, this is too much.

We can just use two IF statements:
    if (data_only && (schema_only || with_statistics || statistics_only))
        pg_fatal("options %s and %s cannot be used together",
                 "-a/--data-only",
                 schema_only ? "-s/--schema-only" :
                 with_statistics ? "--statistics" :
                 "--statistics-only");

    if (schema_only && (with_statistics || statistics_only))
        pg_fatal("options %s and %s cannot be used together",
                 "-s/--schema-only",
                 with_statistics ? "--statistics" :
                 "--statistics-only");

First "if (data_only && (schema_only" implies that the second IF check
won't have a combination
of `` if (schema_only && (data_only``.
Maybe we can use ELSE IF here.

We can do the same thing for pg_restore.c



--
jian
https://www.enterprisedb.com/



Hi, jian,

Your change makes the code cleaner and easier to read.  I like the idea.
Also I applied your patch locally and the make passed, "make check" in the src/bin/pg_dump also passed.

Regards,
Steven







Re: Refactor handling of "-only" options in pg_dump, pg_restore

От
Zsolt Parragi
Дата:
Hello

Simple patch and looks good, just one very minor about this comment:

 /* reject conflicting "-only" options */

I would either remove the comment or the "-only" part, as that's no longer true.
(I see that it was there earlier in the later if, and it was similarly
incorrect. So this is not new with the patch, but still seems wrong)



Re: Refactor handling of "-only" options in pg_dump, pg_restore

От
jian he
Дата:

Re: Refactor handling of "-only" options in pg_dump, pg_restore

От
Nathan Bossart
Дата:
On Mon, Mar 09, 2026 at 04:15:42PM +0800, jian he wrote:
> Most of the code changes are very similar to
> https://git.postgresql.org/cgit/postgresql.git/commit/?id=b2898baaf7e40a187de5b0134d53d944b38209cd
> The change in pg_restore.c is more invasive, so I separated it from pg_dump.

Committed, thanks.

-- 
nathan