Add some notes about why "ALTER TYPE enum DROP VALUE" is hard.

In hopes of putting these where any would-be implementer is sure to
find them, make a placeholder grammar production for ALTER DROP VALUE
and put them there.  This is really just a docs patch, though.

Vik Fearing, with a bit more wordsmithing by me

Discussion: https://postgr.es/m/9fffd149-da0f-0c9c-6745-731fb688642a@postgresfriends.org
This commit is contained in:
Tom Lane 2023-10-03 11:41:42 -04:00
parent c2ba3fdea5
commit af3ee8a086
1 changed files with 27 additions and 0 deletions

View File

@ -6412,6 +6412,33 @@ AlterEnumStmt:
n->skipIfNewValExists = false;
$$ = (Node *) n;
}
| ALTER TYPE_P any_name DROP VALUE_P Sconst
{
/*
* The following problems must be solved before this can be
* implemented:
*
* - There must be no instance of the target value in
* any table.
*
* - The value must not appear in any catalog metadata,
* such as stored view expressions or column defaults.
*
* - The value must not appear in any non-leaf page of a
* btree (and similar issues with other index types).
* This is problematic because a value could persist
* there long after it's gone from user-visible data.
*
* - Concurrent sessions must not be able to insert the
* value while the preceding conditions are being checked.
*
* - Possibly more...
*/
ereport(ERROR,
(errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
errmsg("dropping an enum value is not implemented"),
parser_errposition(@4)));
}
;
opt_if_not_exists: IF_P NOT EXISTS { $$ = true; }