change option to '--exclude-extension'

This commit is contained in:
Dmitry Ivanov 2017-03-23 15:24:41 +03:00
parent e89559a813
commit 1ecec8ce95

View File

@ -251,7 +251,7 @@ static bool dryrun = false;
static unsigned int temp_obj_num = 0; /* temporary objects counter */
static bool no_kill_backend = false; /* abandon when timed-out */
static bool no_superuser_check = false;
static bool include_extensions = false; /* repack tables of extensions */
static SimpleStringList exclude_extension_list = {NULL, NULL}; /* don't repack tables of these extensions */
/* buffer should have at least 11 bytes */
static char *
@ -279,7 +279,7 @@ static pgut_option options[] =
{ 'i', 'j', "jobs", &jobs },
{ 'b', 'D', "no-kill-backend", &no_kill_backend },
{ 'b', 'k', "no-superuser-check", &no_superuser_check },
{ 'b', 'C', "include-extensions", &include_extensions },
{ 'l', 'C', "exclude-extension", &exclude_extension_list },
{ 0 },
};
@ -607,12 +607,14 @@ repack_one_database(const char *orderby, char *errbuf, size_t errsize)
size_t num_tables;
size_t num_schemas;
size_t num_params;
size_t num_excluded_extensions;
num_tables = simple_string_list_size(table_list);
num_schemas = simple_string_list_size(schema_list);
num_excluded_extensions = simple_string_list_size(exclude_extension_list);
/* 1st param is the user-specified tablespace */
num_params = num_tables + num_schemas + 1;
num_params = num_excluded_extensions + num_tables + num_schemas + 1;
params = pgut_malloc(num_params * sizeof(char *));
initStringInfo(&sql);
@ -637,12 +639,6 @@ repack_one_database(const char *orderby, char *errbuf, size_t errsize)
params[iparam++] = tablespace;
if (num_tables)
{
/*
* Tables have been explicitly specified,
* no need to hide tables of extensions
*/
include_extensions = true;
appendStringInfoString(&sql, "(");
for (cell = table_list.head; cell; cell = cell->next)
{
@ -673,12 +669,25 @@ repack_one_database(const char *orderby, char *errbuf, size_t errsize)
}
/* Exclude tables which belong to extensions */
if (!include_extensions)
if (exclude_extension_list.head)
{
appendStringInfoString(&sql, " AND t.relid NOT IN"
" (SELECT objid FROM pg_depend"
" WHERE refclassid = 'pg_extension'::regclass"
" AND classid = 'pg_class'::regclass)");
" (SELECT d.objid::regclass"
" FROM pg_depend d JOIN pg_extension e"
" ON d.refobjid = e.oid"
" WHERE d.classid = 'pg_class'::regclass AND (");
/* List all excluded extensions */
for (cell = exclude_extension_list.head; cell; cell = cell->next)
{
appendStringInfo(&sql, "e.extname = $%d", iparam + 1);
params[iparam++] = cell->val;
appendStringInfoString(&sql, cell->next ? " OR " : ")");
}
/* Close subquery */
appendStringInfoString(&sql, ")");
}
/* Ensure the regression tests get a consistent ordering of tables */
@ -2118,5 +2127,5 @@ pgut_help(bool details)
printf(" -D, --no-kill-backend don't kill other backends when timed out\n");
printf(" -Z, --no-analyze don't analyze at end\n");
printf(" -k, --no-superuser-check skip superuser checks in client\n");
printf(" -C, --include-extensions repack tables which belong to extensions\n");
printf(" -C, --exclude-extension don't repack tables which belong to specific extension\n");
}