mirror of
https://github.com/postgres/postgres.git
synced 2025-08-27 07:42:10 +03:00
Allow adding values to an enum type created in the current transaction.
Normally it is unsafe to allow ALTER TYPE ADD VALUE in a transaction block, because instances of the value could be added to indexes later in the same transaction, and then they would still be accessible even if the transaction rolls back. However, we can allow this if the enum type itself was created in the current transaction, because then any such indexes would have to go away entirely on rollback. The reason for allowing this is to support pg_upgrade's new usage of pg_restore --single-transaction: in --binary-upgrade mode, pg_dump emits enum types as a succession of ALTER TYPE ADD VALUE commands so that it can preserve the values' OIDs. The support is a bit limited, so we'll leave it undocumented. Andres Freund
This commit is contained in:
@@ -972,14 +972,7 @@ standard_ProcessUtility(Node *parsetree,
|
||||
case T_AlterEnumStmt: /* ALTER TYPE (enum) */
|
||||
if (isCompleteQuery)
|
||||
EventTriggerDDLCommandStart(parsetree);
|
||||
|
||||
/*
|
||||
* We disallow this in transaction blocks, because we can't cope
|
||||
* with enum OID values getting into indexes and then having their
|
||||
* defining pg_enum entries go away.
|
||||
*/
|
||||
PreventTransactionChain(isTopLevel, "ALTER TYPE ... ADD");
|
||||
AlterEnum((AlterEnumStmt *) parsetree);
|
||||
AlterEnum((AlterEnumStmt *) parsetree, isTopLevel);
|
||||
break;
|
||||
|
||||
case T_ViewStmt: /* CREATE VIEW */
|
||||
|
Reference in New Issue
Block a user