1
0
mirror of https://github.com/postgres/postgres.git synced 2025-07-14 08:21:07 +03:00

Throw error for ALTER TABLE RESET of an invalid option

Also adjust pg_upgrade to not use this method for optional TOAST table
creation.

Patch by Fabrízio de Royes Mello
This commit is contained in:
Bruce Momjian
2014-08-25 17:06:40 -04:00
parent ebe30ad59b
commit 73d78e11a0
2 changed files with 34 additions and 1 deletions

View File

@ -307,6 +307,8 @@ static void initialize_reloptions(void);
static void parse_one_reloption(relopt_value *option, char *text_str,
int text_len, bool validate);
static bool is_valid_reloption(char *name);
/*
* initialize_reloptions
* initialization routine, must be called before parsing
@ -381,6 +383,25 @@ initialize_reloptions(void)
need_initialization = false;
}
/*
* is_valid_reloption
* check if a reloption exists
*
*/
static bool
is_valid_reloption(char *name)
{
int i;
for (i = 0; relOpts[i]; i++)
{
if (pg_strcasecmp(relOpts[i]->name, name) == 0)
return true;
}
return false;
}
/*
* add_reloption_kind
* Create a new relopt_kind value, to be used in custom reloptions by
@ -672,6 +693,11 @@ transformRelOptions(Datum oldOptions, List *defList, char *namspace,
if (isReset)
{
if (!is_valid_reloption(def->defname))
ereport(ERROR,
(errcode(ERRCODE_INVALID_PARAMETER_VALUE),
errmsg("unrecognized parameter \"%s\"", def->defname)));
if (def->arg != NULL)
ereport(ERROR,
(errcode(ERRCODE_SYNTAX_ERROR),