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>
|
</listitem>
|
||||||
</varlistentry>
|
</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>
|
<varlistentry>
|
||||||
<term><option>-j <replaceable class="parameter">num</replaceable></option></term>
|
<term><option>-j <replaceable class="parameter">num</replaceable></option></term>
|
||||||
<term><option>--jobs=<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;
|
bool show_progress;
|
||||||
int jobs;
|
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. */
|
/* Objects to check or not to check, as lists of PatternInfo structs. */
|
||||||
PatternInfoArray include;
|
PatternInfoArray include;
|
||||||
PatternInfoArray exclude;
|
PatternInfoArray exclude;
|
||||||
@ -109,6 +116,8 @@ static AmcheckOptions opts = {
|
|||||||
.strict_names = true,
|
.strict_names = true,
|
||||||
.show_progress = false,
|
.show_progress = false,
|
||||||
.jobs = 1,
|
.jobs = 1,
|
||||||
|
.install_missing = false,
|
||||||
|
.install_schema = "pg_catalog",
|
||||||
.include = {NULL, 0},
|
.include = {NULL, 0},
|
||||||
.exclude = {NULL, 0},
|
.exclude = {NULL, 0},
|
||||||
.excludetbl = false,
|
.excludetbl = false,
|
||||||
@ -259,6 +268,7 @@ main(int argc, char *argv[])
|
|||||||
{"no-strict-names", no_argument, NULL, 10},
|
{"no-strict-names", no_argument, NULL, 10},
|
||||||
{"heapallindexed", no_argument, NULL, 11},
|
{"heapallindexed", no_argument, NULL, 11},
|
||||||
{"parent-check", no_argument, NULL, 12},
|
{"parent-check", no_argument, NULL, 12},
|
||||||
|
{"install-missing", optional_argument, NULL, 13},
|
||||||
|
|
||||||
{NULL, 0, NULL, 0}
|
{NULL, 0, NULL, 0}
|
||||||
};
|
};
|
||||||
@ -435,6 +445,11 @@ main(int argc, char *argv[])
|
|||||||
case 12:
|
case 12:
|
||||||
opts.parent_check = true;
|
opts.parent_check = true;
|
||||||
break;
|
break;
|
||||||
|
case 13:
|
||||||
|
opts.install_missing = true;
|
||||||
|
if (optarg)
|
||||||
|
opts.install_schema = pg_strdup(optarg);
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
fprintf(stderr,
|
fprintf(stderr,
|
||||||
_("Try \"%s --help\" for more information.\n"),
|
_("Try \"%s --help\" for more information.\n"),
|
||||||
@ -543,6 +558,29 @@ main(int argc, char *argv[])
|
|||||||
conn = connectDatabase(&cparams, progname, opts.echo, false, true);
|
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
|
* Verify that amcheck is installed for this next database. User
|
||||||
* error could result in a database not having amcheck that should
|
* 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(_(" -V, --version output version information, then exit\n"));
|
||||||
printf(_(" -P, --progress show progress information\n"));
|
printf(_(" -P, --progress show progress information\n"));
|
||||||
printf(_(" -?, --help show this help, then exit\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(_("\nReport bugs to <%s>.\n"), PACKAGE_BUGREPORT);
|
||||||
printf(_("%s home page: <%s>\n"), PACKAGE_NAME, PACKAGE_URL);
|
printf(_("%s home page: <%s>\n"), PACKAGE_NAME, PACKAGE_URL);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user