From: jian he <[email protected]>
Sent: Monday, March 02, 2026 12:57
To: PostgreSQL-development <[email protected]>
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






Reply via email to