@ -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 ( _ ( " \n Report bugs to <%s>. \n " ) , PACKAGE_BUGREPORT ) ;
printf ( _ ( " %s home page: <%s> \n " ) , PACKAGE_NAME , PACKAGE_URL ) ;