1
0
mirror of https://github.com/postgres/postgres.git synced 2025-06-26 12:21:12 +03:00

pg_createsubscriber: Rename option --remove to --clean

After discussion, the name --remove was suboptimally chosen.  --clean
has more precedent in other PostgreSQL tools.

Reviewed-by: Hayato Kuroda (Fujitsu) <kuroda.hayato@fujitsu.com>
Discussion: https://www.postgresql.org/message-id/84be7ff3-2763-4c0f-ac1e-ca9862077f41@eisentraut.org
This commit is contained in:
Peter Eisentraut
2025-06-25 10:33:23 +02:00
parent 0cd69b3d7e
commit 60dda7bbc4
3 changed files with 49 additions and 50 deletions

View File

@ -169,36 +169,6 @@ PostgreSQL documentation
</listitem>
</varlistentry>
<varlistentry>
<term><option>-R <replaceable class="parameter">objtype</replaceable></option></term>
<term><option>--remove=<replaceable class="parameter">objtype</replaceable></option></term>
<listitem>
<para>
Remove all objects of the specified type from specified databases on the
target server.
</para>
<para>
<itemizedlist>
<listitem>
<para>
<literal>publications</literal>:
The <literal>FOR ALL TABLES</literal> publications established for this
subscriber are always removed; specifying this object type causes all
other publications replicated from the source server to be dropped as
well.
</para>
</listitem>
</itemizedlist>
</para>
<para>
The objects selected to be dropped are individually logged, including during
a <option>--dry-run</option>. There is no opportunity to affect or stop the
dropping of the selected objects, so consider taking a backup of them
using <application>pg_dump</application>.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><option>-s <replaceable class="parameter">dir</replaceable></option></term>
<term><option>--socketdir=<replaceable class="parameter">dir</replaceable></option></term>
@ -259,6 +229,35 @@ PostgreSQL documentation
</listitem>
</varlistentry>
<varlistentry>
<term><option>--clean=<replaceable class="parameter">objtype</replaceable></option></term>
<listitem>
<para>
Drop all objects of the specified type from specified databases on the
target server.
</para>
<para>
<itemizedlist>
<listitem>
<para>
<literal>publications</literal>:
The <literal>FOR ALL TABLES</literal> publications established for this
subscriber are always dropped; specifying this object type causes all
other publications replicated from the source server to be dropped as
well.
</para>
</listitem>
</itemizedlist>
</para>
<para>
The objects selected to be dropped are individually logged, including during
a <option>--dry-run</option>. There is no opportunity to affect or stop the
dropping of the selected objects, so consider taking a backup of them
using <application>pg_dump</application>.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><option>--config-file=<replaceable class="parameter">filename</replaceable></option></term>
<listitem>

View File

@ -46,7 +46,7 @@ struct CreateSubscriberOptions
SimpleStringList replslot_names; /* list of replication slot names */
int recovery_timeout; /* stop recovery after this time */
bool all_dbs; /* all option */
SimpleStringList objecttypes_to_remove; /* list of object types to remove */
SimpleStringList objecttypes_to_clean; /* list of object types to cleanup */
};
/* per-database publication/subscription info */
@ -71,8 +71,8 @@ struct LogicalRepInfos
{
struct LogicalRepInfo *dbinfo;
bool two_phase; /* enable-two-phase option */
bits32 objecttypes_to_remove; /* flags indicating which object types
* to remove on subscriber */
bits32 objecttypes_to_clean; /* flags indicating which object types
* to clean up on subscriber */
};
static void cleanup_objects_atexit(void);
@ -253,13 +253,13 @@ usage(void)
printf(_(" -n, --dry-run dry run, just show what would be done\n"));
printf(_(" -p, --subscriber-port=PORT subscriber port number (default %s)\n"), DEFAULT_SUB_PORT);
printf(_(" -P, --publisher-server=CONNSTR publisher connection string\n"));
printf(_(" -R, --remove=OBJECTTYPE remove all objects of the specified type from specified\n"
" databases on the subscriber; accepts: \"%s\"\n"), "publications");
printf(_(" -s, --socketdir=DIR socket directory to use (default current dir.)\n"));
printf(_(" -t, --recovery-timeout=SECS seconds to wait for recovery to end\n"));
printf(_(" -T, --enable-two-phase enable two-phase commit for all subscriptions\n"));
printf(_(" -U, --subscriber-username=NAME user name for subscriber connection\n"));
printf(_(" -v, --verbose output verbose messages\n"));
printf(_(" --clean=OBJECTTYPE drop all objects of the specified type from specified\n"
" databases on the subscriber; accepts: \"%s\"\n"), "publications");
printf(_(" --config-file=FILENAME use specified main server configuration\n"
" file when running target cluster\n"));
printf(_(" --publication=NAME publication name\n"));
@ -1730,7 +1730,7 @@ static void
check_and_drop_publications(PGconn *conn, struct LogicalRepInfo *dbinfo)
{
PGresult *res;
bool drop_all_pubs = dbinfos.objecttypes_to_remove & OBJECTTYPE_PUBLICATIONS;
bool drop_all_pubs = dbinfos.objecttypes_to_clean & OBJECTTYPE_PUBLICATIONS;
Assert(conn != NULL);
@ -2026,7 +2026,6 @@ main(int argc, char **argv)
{"dry-run", no_argument, NULL, 'n'},
{"subscriber-port", required_argument, NULL, 'p'},
{"publisher-server", required_argument, NULL, 'P'},
{"remove", required_argument, NULL, 'R'},
{"socketdir", required_argument, NULL, 's'},
{"recovery-timeout", required_argument, NULL, 't'},
{"enable-two-phase", no_argument, NULL, 'T'},
@ -2038,6 +2037,7 @@ main(int argc, char **argv)
{"publication", required_argument, NULL, 2},
{"replication-slot", required_argument, NULL, 3},
{"subscription", required_argument, NULL, 4},
{"clean", required_argument, NULL, 5},
{NULL, 0, NULL, 0}
};
@ -2109,7 +2109,7 @@ main(int argc, char **argv)
get_restricted_token();
while ((c = getopt_long(argc, argv, "ad:D:np:P:R:s:t:TU:v",
while ((c = getopt_long(argc, argv, "ad:D:np:P:s:t:TU:v",
long_options, &option_index)) != -1)
{
switch (c)
@ -2139,12 +2139,6 @@ main(int argc, char **argv)
case 'P':
opt.pub_conninfo_str = pg_strdup(optarg);
break;
case 'R':
if (!simple_string_list_member(&opt.objecttypes_to_remove, optarg))
simple_string_list_append(&opt.objecttypes_to_remove, optarg);
else
pg_fatal("object type \"%s\" specified more than once for -R/--remove", optarg);
break;
case 's':
opt.socket_dir = pg_strdup(optarg);
canonicalize_path(opt.socket_dir);
@ -2191,6 +2185,12 @@ main(int argc, char **argv)
else
pg_fatal("subscription \"%s\" specified more than once for --subscription", optarg);
break;
case 5:
if (!simple_string_list_member(&opt.objecttypes_to_clean, optarg))
simple_string_list_append(&opt.objecttypes_to_clean, optarg);
else
pg_fatal("object type \"%s\" specified more than once for --clean", optarg);
break;
default:
/* getopt_long already emitted a complaint */
pg_log_error_hint("Try \"%s --help\" for more information.", progname);
@ -2334,13 +2334,13 @@ main(int argc, char **argv)
}
/* Verify the object types specified for removal from the subscriber */
for (SimpleStringListCell *cell = opt.objecttypes_to_remove.head; cell; cell = cell->next)
for (SimpleStringListCell *cell = opt.objecttypes_to_clean.head; cell; cell = cell->next)
{
if (pg_strcasecmp(cell->val, "publications") == 0)
dbinfos.objecttypes_to_remove |= OBJECTTYPE_PUBLICATIONS;
dbinfos.objecttypes_to_clean |= OBJECTTYPE_PUBLICATIONS;
else
{
pg_log_error("invalid object type \"%s\" specified for -R/--remove", cell->val);
pg_log_error("invalid object type \"%s\" specified for --clean", cell->val);
pg_log_error_hint("The valid value is: \"%s\"", "publications");
exit(1);
}

View File

@ -331,7 +331,7 @@ $node_p->safe_psql($db1,
$node_p->wait_for_replay_catchup($node_s);
# Create user-defined publications, wait for streaming replication to sync them
# to the standby, then verify that '--remove'
# to the standby, then verify that '--clean'
# removes them.
$node_p->safe_psql(
$db1, qq(
@ -446,7 +446,7 @@ is(scalar(() = $stderr =~ /creating subscription/g),
# Run pg_createsubscriber on node S. --verbose is used twice
# to show more information.
# In passing, also test the --enable-two-phase option and
# --remove option
# --clean option
command_ok(
[
'pg_createsubscriber',
@ -463,7 +463,7 @@ command_ok(
'--database' => $db1,
'--database' => $db2,
'--enable-two-phase',
'--remove' => 'publications',
'--clean' => 'publications',
],
'run pg_createsubscriber on node S');