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