ALTER TYPE
Function
ALTER TYPE modifies the definition of a type.
Precautions
- Only type owners can run ALTER TYPE.
 - To modify the schema of a type, you must also have the CREATE permission for the new schema.
 - To change the owner, you must belong directly or indirectly to the new owner's role. You also need the CREATE permission on the schema of the type.
 - System administrators can change the ownership of any type as needed.
 - To add an attribute or modify the type of an attribute, you must have the USAGE permission on the attribute type.
 
Syntax
- Modify a type. 
     
1 2 3 4 5 6 7 8 9 10 11 12
ALTER TYPE name action [, ... ]; ALTER TYPE name OWNER TO { new_owner | CURRENT_USER | SESSION_USER }; ALTER TYPE name RENAME ATTRIBUTE attribute_name TO new_attribute_name [ CASCADE | RESTRICT ]; ALTER TYPE name RENAME TO new_name; ALTER TYPE name SET SCHEMA new_schema; ALTER TYPE name ADD VALUE [ IF NOT EXISTS ] new_enum_value [ { BEFORE | AFTER } neighbor_enum_value ]; ALTER TYPE name RENAME VALUE existing_enum_value TO new_enum_value; where action is one of: ADD ATTRIBUTE attribute_name data_type [ COLLATE collation ] [ CASCADE | RESTRICT ]; DROP ATTRIBUTE [ IF EXISTS ] attribute_name [ CASCADE | RESTRICT ]; ALTER ATTRIBUTE attribute_name [ SET DATA ] TYPE data_type [ COLLATE collation ] [ CASCADE | RESTRICT ];
 - Add a new attribute to a composite type. 
     
1ALTER TYPE name ADD ATTRIBUTE attribute_name data_type [ COLLATE collation ] [ CASCADE | RESTRICT ];
 
- Delete an attribute from a composite type. 
    
1ALTER TYPE name DROP ATTRIBUTE [ IF EXISTS ] attribute_name [ CASCADE | RESTRICT ];
 
- Change the type of an attribute in a composite type. 
    
1ALTER TYPE name ALTER ATTRIBUTE attribute_name [ SET DATA ] TYPE data_type [ COLLATE collation ] [ CASCADE | RESTRICT ];
 
 
   ADD ATTRIBUTE, DROP ATTRIBUTE, and ALTER ATTRIBUTE can be combined for execution. For example, you can add multiple attributes to a command or change the types of multiple attributes.
- Change the owner of a type. 
    
1ALTER TYPE name OWNER TO { new_owner | CURRENT_USER | SESSION_USER };
 
- Change the name of a type or the name of an attribute in a composite type. 
    
1 2
ALTER TYPE name RENAME TO new_name; ALTER TYPE name RENAME ATTRIBUTE attribute_name TO new_attribute_name [ CASCADE | RESTRICT ];
 
- Move a type to a new schema. 
    
1ALTER TYPE name SET SCHEMA new_schema;
 
- Add a new value to an enumerated type. 
    
1ALTER TYPE name ADD VALUE [ IF NOT EXISTS ] new_enum_value [ { BEFORE | AFTER } neighbor_enum_value ];
 
- Change an enumerated value in the value list. 
    
1ALTER TYPE name RENAME VALUE existing_enum_value TO new_enum_value;
 
Parameter Description
| 
         Parameter  | 
       
         Description  | 
       
         Value Range  | 
      
|---|---|---|
| 
         name  | 
       
         Specifies the name of an existing type to be modified, which can include a schema.  | 
       
         Valid type name.  | 
      
| 
         new_name  | 
       
         Specifies the new name of a type.  | 
       
         A string.  | 
      
| 
         new_owner  | 
       
         Specifies the username of the new owner of the type.  | 
       
         Valid username.  | 
      
| 
         new_schema  | 
       
         Specifies the new schema of the type.  | 
       
         Valid schema name.  | 
      
| 
         attribute_name  | 
       
         Specifies the name of the attribute to be added, changed, or deleted.  | 
       
         -  | 
      
| 
         new_attribute_name  | 
       
         Specifies the new name of the property to be renamed.  | 
       
         -  | 
      
| 
         data_type  | 
       
         Specifies the data type of the attribute to be added or the new type name of the attribute to be changed.  | 
       
         -  | 
      
| 
         new_enum_value  | 
       
         Specifies the new tag value of the enumeration type.  | 
       
         A string. The value cannot be empty and contains a maximum of 64 bytes.  | 
      
| 
         neighbor_enum_value  | 
       
         Specifies an existing enumerated value before or after which a new enumerated value will be added.  | 
       
         -  | 
      
| 
         existing_enum_value  | 
       
         Specifies the existing enumeration value to be renamed.  | 
       
         A string. The value cannot be empty and contains a maximum of 64 bytes.  | 
      
| 
         CASCADE  | 
       
         Determines that the type to be modified, its associated records, and subtables that inherit the type will all be updated.  | 
       
         -  | 
      
| 
         RESTRICT  | 
       
         Refuses the update if the type of the association to be updated is an updated type. RESTRICT is the default option.  | 
       
         -  | 
      
Examples
Create an example composite type test, enumeration type testdata, and user user_t.
         1 2 3  | 
        
         CREATE TYPE test AS (col1 int, col text); CREATE TYPE testdata AS ENUM ('create', 'modify', 'closed'); CREATE USER user_t PASSWORD '{Password}';  | 
       
Rename data type test to test1.
         1
          | 
        
         ALTER TYPE test RENAME TO test1;  | 
       
Change the owner of the user-defined type test1 to user_t.
         1
          | 
        
         ALTER TYPE test1 OWNER TO user_t;  | 
       
Change the schema of the user-defined type test1 to user_t.
         1
          | 
        
         ALTER TYPE test1 SET SCHEMA user_t;  | 
       
Add a new attribute col3 to the user-defined type test1.
         1
          | 
        
         ALTER TYPE user_t.test1 ADD ATTRIBUTE col3 int;  | 
       
Add a tag value to the enumeration type testdata.
         1
          | 
        
         ALTER TYPE testdata ADD VALUE IF NOT EXISTS 'regress' BEFORE 'closed';  | 
       
Rename a tag value of the enumeration type testdata.
         1
          | 
        
         ALTER TYPE testdata RENAME VALUE 'create' TO 'new';  | 
       
Helpful Links
CREATE TYPE and DROP TYPE
Feedback
Was this page helpful?
Provide feedbackThank you very much for your feedback. We will continue working to improve the documentation.