ALTER TYPE name RENAME ATTRIBUTE attribute_name TO new_attribute_name
ALTER TYPE name RENAME TO new_name
ALTER TYPE name SET SCHEMA new_schema
-ALTER TYPE name ADD new_enum_value [ { BEFORE | AFTER } existing_enum_value ]
+ALTER TYPE name ADD VALUE new_enum_value [ { BEFORE | AFTER } existing_enum_value ]
- ADD [ BEFORE | AFTER ]
+ ADD VALUE [ BEFORE | AFTER ]
This form adds a new value to an enum type. If the new value's place in
Notes
- ALTER TYPE ... ADD> (the form that adds a new value to an
+ ALTER TYPE ... ADD VALUE> (the form that adds a new value to an
enum type) cannot be executed inside a transaction block.
To add a new value to an enum type in a particular sort position:
-ALTER TYPE colors ADD 'orange' AFTER 'red';
+ALTER TYPE colors ADD VALUE 'orange' AFTER 'red';
*****************************************************************************/
AlterEnumStmt:
- ALTER TYPE_P any_name ADD_P Sconst
+ ALTER TYPE_P any_name ADD_P VALUE_P Sconst
{
AlterEnumStmt *n = makeNode(AlterEnumStmt);
n->typeName = $3;
- n->newVal = $5;
+ n->newVal = $6;
n->newValNeighbor = NULL;
n->newValIsAfter = true;
$$ = (Node *) n;
}
- | ALTER TYPE_P any_name ADD_P Sconst BEFORE Sconst
+ | ALTER TYPE_P any_name ADD_P VALUE_P Sconst BEFORE Sconst
{
AlterEnumStmt *n = makeNode(AlterEnumStmt);
n->typeName = $3;
- n->newVal = $5;
- n->newValNeighbor = $7;
+ n->newVal = $6;
+ n->newValNeighbor = $8;
n->newValIsAfter = false;
$$ = (Node *) n;
}
- | ALTER TYPE_P any_name ADD_P Sconst AFTER Sconst
+ | ALTER TYPE_P any_name ADD_P VALUE_P Sconst AFTER Sconst
{
AlterEnumStmt *n = makeNode(AlterEnumStmt);
n->typeName = $3;
- n->newVal = $5;
- n->newValNeighbor = $7;
+ n->newVal = $6;
+ n->newValNeighbor = $8;
n->newValIsAfter = true;
$$ = (Node *) n;
}
mars | 3
(3 rows)
-ALTER TYPE planets ADD 'uranus';
+ALTER TYPE planets ADD VALUE 'uranus';
SELECT enumlabel, enumsortorder
FROM pg_enum
WHERE enumtypid = 'planets'::regtype
uranus | 4
(4 rows)
-ALTER TYPE planets ADD 'mercury' BEFORE 'venus';
-ALTER TYPE planets ADD 'saturn' BEFORE 'uranus';
-ALTER TYPE planets ADD 'jupiter' AFTER 'mars';
-ALTER TYPE planets ADD 'neptune' AFTER 'uranus';
+ALTER TYPE planets ADD VALUE 'mercury' BEFORE 'venus';
+ALTER TYPE planets ADD VALUE 'saturn' BEFORE 'uranus';
+ALTER TYPE planets ADD VALUE 'jupiter' AFTER 'mars';
+ALTER TYPE planets ADD VALUE 'neptune' AFTER 'uranus';
SELECT enumlabel, enumsortorder
FROM pg_enum
WHERE enumtypid = 'planets'::regtype
(8 rows)
-- errors for adding labels
-ALTER TYPE planets ADD
+ALTER TYPE planets ADD VALUE
'plutoplutoplutoplutoplutoplutoplutoplutoplutoplutoplutoplutoplutopluto';
ERROR: invalid enum label "plutoplutoplutoplutoplutoplutoplutoplutoplutoplutoplutoplutoplutopluto"
DETAIL: Labels must be 63 characters or less.
-ALTER TYPE planets ADD 'pluto' AFTER 'zeus';
+ALTER TYPE planets ADD VALUE 'pluto' AFTER 'zeus';
ERROR: "zeus" is not an existing enum label
--
-- Test inserting so many values that we have to renumber
--
create type insenum as enum ('L1', 'L2');
-alter type insenum add 'i1' before 'L2';
-alter type insenum add 'i2' before 'L2';
-alter type insenum add 'i3' before 'L2';
-alter type insenum add 'i4' before 'L2';
-alter type insenum add 'i5' before 'L2';
-alter type insenum add 'i6' before 'L2';
-alter type insenum add 'i7' before 'L2';
-alter type insenum add 'i8' before 'L2';
-alter type insenum add 'i9' before 'L2';
-alter type insenum add 'i10' before 'L2';
-alter type insenum add 'i11' before 'L2';
-alter type insenum add 'i12' before 'L2';
-alter type insenum add 'i13' before 'L2';
-alter type insenum add 'i14' before 'L2';
-alter type insenum add 'i15' before 'L2';
-alter type insenum add 'i16' before 'L2';
-alter type insenum add 'i17' before 'L2';
-alter type insenum add 'i18' before 'L2';
-alter type insenum add 'i19' before 'L2';
-alter type insenum add 'i20' before 'L2';
-alter type insenum add 'i21' before 'L2';
-alter type insenum add 'i22' before 'L2';
-alter type insenum add 'i23' before 'L2';
-alter type insenum add 'i24' before 'L2';
-alter type insenum add 'i25' before 'L2';
-alter type insenum add 'i26' before 'L2';
-alter type insenum add 'i27' before 'L2';
-alter type insenum add 'i28' before 'L2';
-alter type insenum add 'i29' before 'L2';
-alter type insenum add 'i30' before 'L2';
+alter type insenum add value 'i1' before 'L2';
+alter type insenum add value 'i2' before 'L2';
+alter type insenum add value 'i3' before 'L2';
+alter type insenum add value 'i4' before 'L2';
+alter type insenum add value 'i5' before 'L2';
+alter type insenum add value 'i6' before 'L2';
+alter type insenum add value 'i7' before 'L2';
+alter type insenum add value 'i8' before 'L2';
+alter type insenum add value 'i9' before 'L2';
+alter type insenum add value 'i10' before 'L2';
+alter type insenum add value 'i11' before 'L2';
+alter type insenum add value 'i12' before 'L2';
+alter type insenum add value 'i13' before 'L2';
+alter type insenum add value 'i14' before 'L2';
+alter type insenum add value 'i15' before 'L2';
+alter type insenum add value 'i16' before 'L2';
+alter type insenum add value 'i17' before 'L2';
+alter type insenum add value 'i18' before 'L2';
+alter type insenum add value 'i19' before 'L2';
+alter type insenum add value 'i20' before 'L2';
+alter type insenum add value 'i21' before 'L2';
+alter type insenum add value 'i22' before 'L2';
+alter type insenum add value 'i23' before 'L2';
+alter type insenum add value 'i24' before 'L2';
+alter type insenum add value 'i25' before 'L2';
+alter type insenum add value 'i26' before 'L2';
+alter type insenum add value 'i27' before 'L2';
+alter type insenum add value 'i28' before 'L2';
+alter type insenum add value 'i29' before 'L2';
+alter type insenum add value 'i30' before 'L2';
-- The exact values of enumsortorder will now depend on the local properties
-- of float4, but in any reasonable implementation we should get at least
-- 20 splits before having to renumber; so only hide values > 20.
WHERE enumtypid = 'planets'::regtype
ORDER BY 2;
-ALTER TYPE planets ADD 'uranus';
+ALTER TYPE planets ADD VALUE 'uranus';
SELECT enumlabel, enumsortorder
FROM pg_enum
WHERE enumtypid = 'planets'::regtype
ORDER BY 2;
-ALTER TYPE planets ADD 'mercury' BEFORE 'venus';
-ALTER TYPE planets ADD 'saturn' BEFORE 'uranus';
-ALTER TYPE planets ADD 'jupiter' AFTER 'mars';
-ALTER TYPE planets ADD 'neptune' AFTER 'uranus';
+ALTER TYPE planets ADD VALUE 'mercury' BEFORE 'venus';
+ALTER TYPE planets ADD VALUE 'saturn' BEFORE 'uranus';
+ALTER TYPE planets ADD VALUE 'jupiter' AFTER 'mars';
+ALTER TYPE planets ADD VALUE 'neptune' AFTER 'uranus';
SELECT enumlabel, enumsortorder
FROM pg_enum
ORDER BY enumlabel::planets;
-- errors for adding labels
-ALTER TYPE planets ADD
+ALTER TYPE planets ADD VALUE
'plutoplutoplutoplutoplutoplutoplutoplutoplutoplutoplutoplutoplutopluto';
-ALTER TYPE planets ADD 'pluto' AFTER 'zeus';
+ALTER TYPE planets ADD VALUE 'pluto' AFTER 'zeus';
--
-- Test inserting so many values that we have to renumber
create type insenum as enum ('L1', 'L2');
-alter type insenum add 'i1' before 'L2';
-alter type insenum add 'i2' before 'L2';
-alter type insenum add 'i3' before 'L2';
-alter type insenum add 'i4' before 'L2';
-alter type insenum add 'i5' before 'L2';
-alter type insenum add 'i6' before 'L2';
-alter type insenum add 'i7' before 'L2';
-alter type insenum add 'i8' before 'L2';
-alter type insenum add 'i9' before 'L2';
-alter type insenum add 'i10' before 'L2';
-alter type insenum add 'i11' before 'L2';
-alter type insenum add 'i12' before 'L2';
-alter type insenum add 'i13' before 'L2';
-alter type insenum add 'i14' before 'L2';
-alter type insenum add 'i15' before 'L2';
-alter type insenum add 'i16' before 'L2';
-alter type insenum add 'i17' before 'L2';
-alter type insenum add 'i18' before 'L2';
-alter type insenum add 'i19' before 'L2';
-alter type insenum add 'i20' before 'L2';
-alter type insenum add 'i21' before 'L2';
-alter type insenum add 'i22' before 'L2';
-alter type insenum add 'i23' before 'L2';
-alter type insenum add 'i24' before 'L2';
-alter type insenum add 'i25' before 'L2';
-alter type insenum add 'i26' before 'L2';
-alter type insenum add 'i27' before 'L2';
-alter type insenum add 'i28' before 'L2';
-alter type insenum add 'i29' before 'L2';
-alter type insenum add 'i30' before 'L2';
+alter type insenum add value 'i1' before 'L2';
+alter type insenum add value 'i2' before 'L2';
+alter type insenum add value 'i3' before 'L2';
+alter type insenum add value 'i4' before 'L2';
+alter type insenum add value 'i5' before 'L2';
+alter type insenum add value 'i6' before 'L2';
+alter type insenum add value 'i7' before 'L2';
+alter type insenum add value 'i8' before 'L2';
+alter type insenum add value 'i9' before 'L2';
+alter type insenum add value 'i10' before 'L2';
+alter type insenum add value 'i11' before 'L2';
+alter type insenum add value 'i12' before 'L2';
+alter type insenum add value 'i13' before 'L2';
+alter type insenum add value 'i14' before 'L2';
+alter type insenum add value 'i15' before 'L2';
+alter type insenum add value 'i16' before 'L2';
+alter type insenum add value 'i17' before 'L2';
+alter type insenum add value 'i18' before 'L2';
+alter type insenum add value 'i19' before 'L2';
+alter type insenum add value 'i20' before 'L2';
+alter type insenum add value 'i21' before 'L2';
+alter type insenum add value 'i22' before 'L2';
+alter type insenum add value 'i23' before 'L2';
+alter type insenum add value 'i24' before 'L2';
+alter type insenum add value 'i25' before 'L2';
+alter type insenum add value 'i26' before 'L2';
+alter type insenum add value 'i27' before 'L2';
+alter type insenum add value 'i28' before 'L2';
+alter type insenum add value 'i29' before 'L2';
+alter type insenum add value 'i30' before 'L2';
-- The exact values of enumsortorder will now depend on the local properties
-- of float4, but in any reasonable implementation we should get at least