diff options
| author | Tom Lane | 2010-10-25 03:04:37 +0000 |
|---|---|---|
| committer | Tom Lane | 2010-10-25 03:05:41 +0000 |
| commit | 84c123be1de8a9955741e20c9f945571e40c545e (patch) | |
| tree | 6ea497e47ec62ef8e1ee83b9acfe1fcd2b2419d6 /src/backend/tcop | |
| parent | 24b29ca8f9dc4a5e5f873f0fcb56438c526700f6 (diff) | |
Allow new values to be added to an existing enum type.
After much expenditure of effort, we've got this to the point where the
performance penalty is pretty minimal in typical cases.
Andrew Dunstan, reviewed by Brendan Jurd, Dean Rasheed, and Tom Lane
Diffstat (limited to 'src/backend/tcop')
| -rw-r--r-- | src/backend/tcop/utility.c | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/src/backend/tcop/utility.c b/src/backend/tcop/utility.c index 75cb354ea89..2300e882499 100644 --- a/src/backend/tcop/utility.c +++ b/src/backend/tcop/utility.c @@ -190,6 +190,7 @@ check_xact_readonly(Node *parsetree) case T_CreateTrigStmt: case T_CompositeTypeStmt: case T_CreateEnumStmt: + case T_AlterEnumStmt: case T_ViewStmt: case T_DropCastStmt: case T_DropStmt: @@ -860,6 +861,16 @@ standard_ProcessUtility(Node *parsetree, DefineEnum((CreateEnumStmt *) parsetree); break; + case T_AlterEnumStmt: /* ALTER TYPE (enum) */ + /* + * 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); + break; + case T_ViewStmt: /* CREATE VIEW */ DefineView((ViewStmt *) parsetree, queryString); break; @@ -1868,6 +1879,10 @@ CreateCommandTag(Node *parsetree) tag = "CREATE TYPE"; break; + case T_AlterEnumStmt: + tag = "ALTER TYPE"; + break; + case T_ViewStmt: tag = "CREATE VIEW"; break; @@ -2410,6 +2425,10 @@ GetCommandLogLevel(Node *parsetree) lev = LOGSTMT_DDL; break; + case T_AlterEnumStmt: + lev = LOGSTMT_DDL; + break; + case T_ViewStmt: lev = LOGSTMT_DDL; break; |
