Commit 73d78e11 authored by Bruce Momjian's avatar Bruce Momjian

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
parent ebe30ad5
...@@ -115,6 +115,10 @@ optionally_create_toast_tables(void) ...@@ -115,6 +115,10 @@ optionally_create_toast_tables(void)
"c.relkind IN ('r', 'm') AND " "c.relkind IN ('r', 'm') AND "
"c.reltoastrelid = 0"); "c.reltoastrelid = 0");
/* Suppress NOTICE output from non-existant constraints */
PQclear(executeQueryOrDie(conn, "SET client_min_messages = warning;"));
PQclear(executeQueryOrDie(conn, "SET log_min_messages = warning;"));
ntups = PQntuples(res); ntups = PQntuples(res);
i_nspname = PQfnumber(res, "nspname"); i_nspname = PQfnumber(res, "nspname");
i_relname = PQfnumber(res, "relname"); i_relname = PQfnumber(res, "relname");
...@@ -125,13 +129,16 @@ optionally_create_toast_tables(void) ...@@ -125,13 +129,16 @@ optionally_create_toast_tables(void)
OPTIONALLY_CREATE_TOAST_OID)); OPTIONALLY_CREATE_TOAST_OID));
/* dummy command that also triggers check for required TOAST table */ /* dummy command that also triggers check for required TOAST table */
PQclear(executeQueryOrDie(conn, "ALTER TABLE %s.%s RESET (binary_upgrade_dummy_option);", PQclear(executeQueryOrDie(conn, "ALTER TABLE %s.%s DROP CONSTRAINT IF EXISTS binary_upgrade_dummy_constraint;",
quote_identifier(PQgetvalue(res, rowno, i_nspname)), quote_identifier(PQgetvalue(res, rowno, i_nspname)),
quote_identifier(PQgetvalue(res, rowno, i_relname)))); quote_identifier(PQgetvalue(res, rowno, i_relname))));
} }
PQclear(res); PQclear(res);
PQclear(executeQueryOrDie(conn, "RESET client_min_messages;"));
PQclear(executeQueryOrDie(conn, "RESET log_min_messages;"));
PQfinish(conn); PQfinish(conn);
} }
......
...@@ -307,6 +307,8 @@ static void initialize_reloptions(void); ...@@ -307,6 +307,8 @@ static void initialize_reloptions(void);
static void parse_one_reloption(relopt_value *option, char *text_str, static void parse_one_reloption(relopt_value *option, char *text_str,
int text_len, bool validate); int text_len, bool validate);
static bool is_valid_reloption(char *name);
/* /*
* initialize_reloptions * initialize_reloptions
* initialization routine, must be called before parsing * initialization routine, must be called before parsing
...@@ -381,6 +383,25 @@ initialize_reloptions(void) ...@@ -381,6 +383,25 @@ initialize_reloptions(void)
need_initialization = false; 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 * add_reloption_kind
* Create a new relopt_kind value, to be used in custom reloptions by * Create a new relopt_kind value, to be used in custom reloptions by
...@@ -672,6 +693,11 @@ transformRelOptions(Datum oldOptions, List *defList, char *namspace, ...@@ -672,6 +693,11 @@ transformRelOptions(Datum oldOptions, List *defList, char *namspace,
if (isReset) 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) if (def->arg != NULL)
ereport(ERROR, ereport(ERROR,
(errcode(ERRCODE_SYNTAX_ERROR), (errcode(ERRCODE_SYNTAX_ERROR),
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment