mirror of
https://github.com/postgres/postgres.git
synced 2025-05-03 22:24:49 +03:00
Provide pg_amcheck with an --install-missing option
This will install amcheck in the database if not present. The default schema is for the extension is pg_catalog, but this can be overridden by providing a value for the option. Mark Dilger, slightly editorialized by me. (rather divergent) Discussion: https://postgr.es/m/bdc0f7c2-09e3-ee57-8471-569dfb509234@dunslane.net
This commit is contained in:
parent
aa271209f6
commit
b859d94c63
@ -217,6 +217,23 @@ PostgreSQL documentation
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry>
|
||||
<term><option>--install-missing</option></term>
|
||||
<term><option>--install-missing=<replaceable class="parameter">schema</replaceable></option></term>
|
||||
<listitem>
|
||||
<para>
|
||||
Install any missing extensions that are required to check the
|
||||
database(s). If not yet installed, each extension's objects will be
|
||||
installed into the given
|
||||
<replaceable class="parameter">schema</replaceable>, or if not specified
|
||||
into schema <literal>pg_catalog</literal>.
|
||||
</para>
|
||||
<para>
|
||||
At present, the only required extension is <xref linkend="amcheck"/>.
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry>
|
||||
<term><option>-j <replaceable class="parameter">num</replaceable></option></term>
|
||||
<term><option>--jobs=<replaceable class="parameter">num</replaceable></option></term>
|
||||
|
@ -61,6 +61,13 @@ typedef struct AmcheckOptions
|
||||
bool show_progress;
|
||||
int jobs;
|
||||
|
||||
/*
|
||||
* Whether to install missing extensions, and optionally the name of the
|
||||
* schema in which to install the extension's objects.
|
||||
*/
|
||||
bool install_missing;
|
||||
char *install_schema;
|
||||
|
||||
/* Objects to check or not to check, as lists of PatternInfo structs. */
|
||||
PatternInfoArray include;
|
||||
PatternInfoArray exclude;
|
||||
@ -109,6 +116,8 @@ static AmcheckOptions opts = {
|
||||
.strict_names = true,
|
||||
.show_progress = false,
|
||||
.jobs = 1,
|
||||
.install_missing = false,
|
||||
.install_schema = "pg_catalog",
|
||||
.include = {NULL, 0},
|
||||
.exclude = {NULL, 0},
|
||||
.excludetbl = false,
|
||||
@ -259,6 +268,7 @@ main(int argc, char *argv[])
|
||||
{"no-strict-names", no_argument, NULL, 10},
|
||||
{"heapallindexed", no_argument, NULL, 11},
|
||||
{"parent-check", no_argument, NULL, 12},
|
||||
{"install-missing", optional_argument, NULL, 13},
|
||||
|
||||
{NULL, 0, NULL, 0}
|
||||
};
|
||||
@ -435,6 +445,11 @@ main(int argc, char *argv[])
|
||||
case 12:
|
||||
opts.parent_check = true;
|
||||
break;
|
||||
case 13:
|
||||
opts.install_missing = true;
|
||||
if (optarg)
|
||||
opts.install_schema = pg_strdup(optarg);
|
||||
break;
|
||||
default:
|
||||
fprintf(stderr,
|
||||
_("Try \"%s --help\" for more information.\n"),
|
||||
@ -543,6 +558,29 @@ main(int argc, char *argv[])
|
||||
conn = connectDatabase(&cparams, progname, opts.echo, false, true);
|
||||
}
|
||||
|
||||
/*
|
||||
* Optionally install amcheck if not already installed in this
|
||||
* database.
|
||||
*/
|
||||
if (opts.install_missing)
|
||||
{
|
||||
char *schema;
|
||||
char *install_sql;
|
||||
|
||||
/*
|
||||
* Must re-escape the schema name for each database, as the
|
||||
* escaping rules may change.
|
||||
*/
|
||||
schema = PQescapeIdentifier(conn, opts.install_schema,
|
||||
strlen(opts.install_schema));
|
||||
install_sql = psprintf("CREATE EXTENSION IF NOT EXISTS amcheck WITH SCHEMA %s",
|
||||
schema);
|
||||
|
||||
executeCommand(conn, install_sql, opts.echo);
|
||||
pfree(install_sql);
|
||||
pfree(schema);
|
||||
}
|
||||
|
||||
/*
|
||||
* Verify that amcheck is installed for this next database. User
|
||||
* error could result in a database not having amcheck that should
|
||||
@ -1153,6 +1191,7 @@ help(const char *progname)
|
||||
printf(_(" -V, --version output version information, then exit\n"));
|
||||
printf(_(" -P, --progress show progress information\n"));
|
||||
printf(_(" -?, --help show this help, then exit\n"));
|
||||
printf(_(" --install-missing install missing extensions\n"));
|
||||
|
||||
printf(_("\nReport bugs to <%s>.\n"), PACKAGE_BUGREPORT);
|
||||
printf(_("%s home page: <%s>\n"), PACKAGE_NAME, PACKAGE_URL);
|
||||
|
Loading…
x
Reference in New Issue
Block a user