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:
parent
c2ba3fdea5
commit
af3ee8a086
@ -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; }
|
||||
|
Loading…
x
Reference in New Issue
Block a user