diff options
author | Bruce Momjian <bruce@momjian.us> | 2014-08-25 17:06:40 -0400 |
---|---|---|
committer | Bruce Momjian <bruce@momjian.us> | 2014-08-25 17:06:40 -0400 |
commit | 73d78e11a0f7183c80b93eefbbb6026fe9664015 (patch) | |
tree | db5ab7b5c61f17586d03d7d601ad9c42b14ec238 /src/backend/access/common/reloptions.c | |
parent | ebe30ad59bb2d127f576be07e036a473999c4b80 (diff) | |
download | postgresql-73d78e11a0f7183c80b93eefbbb6026fe9664015.tar.gz postgresql-73d78e11a0f7183c80b93eefbbb6026fe9664015.zip |
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
Diffstat (limited to 'src/backend/access/common/reloptions.c')
-rw-r--r-- | src/backend/access/common/reloptions.c | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/src/backend/access/common/reloptions.c b/src/backend/access/common/reloptions.c index e0b81b9eb51..97a4e227a3b 100644 --- a/src/backend/access/common/reloptions.c +++ b/src/backend/access/common/reloptions.c @@ -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 @@ -382,6 +384,25 @@ initialize_reloptions(void) } /* + * 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 * user-defined AMs. @@ -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), |