Thread

Commits

  1. pg_{dump,restore}: Refactor handling of conflicting options.

  2. pg_dumpall: Fix handling of conflicting options.

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

    jian he <jian.universality@gmail.com> — 2026-03-02T04:57:20Z

    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/
    
  2. Re: Refactor handling of "-only" options in pg_dump, pg_restore

    Steven Niu <niushiji@gmail.com> — 2026-03-02T09:32:30Z

    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
    
    
    
    
    
    
    
    
  3. Re: Refactor handling of "-only" options in pg_dump, pg_restore

    Zsolt Parragi <zsolt.parragi@percona.com> — 2026-03-02T21:58:30Z

    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)
    
    
    
    
  4. Re: Refactor handling of "-only" options in pg_dump, pg_restore

    jian he <jian.universality@gmail.com> — 2026-03-09T08:15:42Z

    Hi.
    
    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.
    
    
    
    --
    jian
    https://www.enterprisedb.com/
    
  5. Re: Refactor handling of "-only" options in pg_dump, pg_restore

    Nathan Bossart <nathandbossart@gmail.com> — 2026-03-09T16:38:47Z

    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