ALTER TYPE

ALTER TYPE-更改类型的定义

Synopsis

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 ]

Description

ALTER TYPE更改现有类型的定义。有几个子窗体:

如果指定了IF NOT EXISTS,则该类型已经包含新值也不会出错:发出通知,但不执行其他任何操作。否则,如果新值已经存在,将发生错误。

ADD ATTRIBUTEDROP ATTRIBUTEALTER ATTRIBUTE动作可以组合成多个更改列表以并行应用。例如,可以在单个命令中添加多个属性和/或更改多个属性的类型。

您必须拥有类型才能使用ALTER TYPE。要更改类型的架构,您还必须对新架构具有CREATE特权。要更改所有者,您还必须是新拥有角色的直接或间接成员,并且该角色必须对类型的架构具有CREATE特权。 (这些限制规定,更改所有者不能通过删除并重新创建类型来完成您无法做的任何事情.但是,超级用户仍然可以更改任何类型的所有权.)要添加属性或更改属性类型,您必须在数据类型上也具有USAGE特权。

Parameters

Notes

ALTER TYPE ... ADD VALUE(向枚举类型添加新值的形式)不能在事务块内执行。

涉及增加的枚举值的比较有时会比仅涉及枚举类型的原始成员的比较慢。通常仅在使用BEFOREAFTER设置新值的排序位置(而不是列表的末尾)时才会发生。但是,有时即使将新值添加到末尾也会发生(如果自从最初创建枚举类型以来 OID 计数器被“环绕”,就会发生这种情况)。增长速度通常很小。但是,如果重要的话,可以通过删除并重新创建枚举类型,或通过转储并重新加载数据库来获得最佳性能。

Examples

要重命名数据类型:

ALTER TYPE electronic_mail RENAME TO email;

要将类型email的所有者更改为joe

ALTER TYPE email OWNER TO joe;

要将类型email的架构更改为customers

ALTER TYPE email SET SCHEMA customers;

要将新属性添加到类型:

ALTER TYPE compfoo ADD ATTRIBUTE f3 int;

要将新值添加到特定排序位置的枚举类型:

ALTER TYPE colors ADD VALUE 'orange' AFTER 'red';

重命名枚举值:

ALTER TYPE colors RENAME VALUE 'purple' TO 'mauve';

Compatibility

添加和删除属性的变体是 SQL 标准的一部分;其他变体是 PostgreSQL 扩展。

See Also

CREATE TYPE, DROP TYPE

上一章 首页 下一章