更新时间:2024-11-27 GMT+08:00

ALTER 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 ]
    
  • 给复合类型增加新的属性。
    1
    ALTER TYPE name ADD ATTRIBUTE attribute_name data_type [ COLLATE collation ] [ CASCADE | RESTRICT ]
    
  • 从复合类型删除一个属性。
    1
    ALTER TYPE name DROP ATTRIBUTE [ IF EXISTS ] attribute_name [ CASCADE | RESTRICT ]
    
  • 改变一种复合类型中某个属性的类型。
    1
    ALTER TYPE name ALTER ATTRIBUTE attribute_name [ SET DATA ] TYPE data_type [ COLLATE collation ] [ CASCADE | RESTRICT ]
    
  • 改变类型的所有者。
    1
    ALTER TYPE name OWNER TO { new_owner | CURRENT_USER | SESSION_USER }
    
  • 改变类型的名称或是一个复合类型中的一个属性的名称。
    1
    2
    ALTER TYPE name RENAME TO new_name
    ALTER TYPE name RENAME ATTRIBUTE attribute_name TO new_attribute_name [ CASCADE | RESTRICT ]
    
  • 将类型移至一个新的模式中。
    1
    ALTER TYPE name SET SCHEMA new_schema
    
  • 为枚举类型增加一个新值。
    1
    ALTER TYPE name ADD VALUE [ IF NOT EXISTS ] new_enum_value [ { BEFORE | AFTER } neighbor_enum_value ]
    
  • 重命名枚举类型的一个标签值。
    1
    ALTER TYPE name RENAME VALUE existing_enum_value TO new_enum_value
    

参数说明

  • name

    一个需要修改的现有的类型的名字(可以有模式修饰) 。

  • new_name

    该类型的新名称。

  • new_owner

    新所有者的用户名 。

  • new_schema

    该类型的新模式 。

  • attribute_name

    拟增加、更改或删除的属性的名称。

  • new_attribute_name

    拟改名的属性的新名称。

  • data_type

    拟新增属性的数据类型,或是拟更改的属性的新类型名。

  • new_enum_value

    枚举类型新增加的标签值,是一个非空的长度不超过64个字节的字符串。

  • neighbor_enum_value

    一个已有枚举标签值,新值应该被增加在紧接着该枚举值之前或者之后的位置上。

  • existing_enum_value

    现有的要重命名的枚举值,是一个非空的长度不超过64个字节的字符串

  • CASCADE

    自动级联更新需更新类型以及相关联的记录和继承它们的子表。

  • RESTRICT

    如果需联动更新类型是已更新类型的关联记录,则拒绝更新。这是缺省选项。

    • ADD ATTRIBUTE、DROP ATTRIBUTE和ALTER ATTRIBUTE选项可以组合成一个列表同时执行。 例如,在一条命令中同时增加多个属性或是更改多个属性的类型。
    • 要使用ALTER TYPE,必须是该类型的所有者。 要修改类型的模式,还必须在新模式上拥有CREATE权限。 要修改所有者,必须是新的所有角色的直接或间接成员, 并且该角色必须在此类型的模式上有CREATE权限。 (这些限制强制要求修改所有者不能执行任何通过删除和重建该类型无法实现的操作。 不过,系统管理员拥有以任何方式修改任意类型的所有权。)要增加属性或是修改属性的类型,也必须拥有该类型的USAGE权限。

示例

创建示例复合类型test,枚举类型testdata和用户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}';

重命名数据类型:

1
ALTER TYPE test RENAME TO test1;

修改用户定义类型test1的所有者为user_t:

1
ALTER TYPE test1 OWNER TO user_t;

把用户定义类型test1的模式改为user_t:

1
ALTER TYPE test1 SET SCHEMA user_t;

给数据类型test1增加一个新的属性f3:

1
ALTER TYPE user_t.test1 ADD ATTRIBUTE col3 int;

给枚举类型testdata添加一个标签值:

1
ALTER TYPE testdata ADD VALUE IF NOT EXISTS 'regress' BEFORE 'closed';

重命名枚举类型testdata的一个标签值:

1
ALTER TYPE testdata RENAME VALUE 'create' TO 'new';

相关链接

CREATE TYPEDROP TYPE