跳转至

ALTER TYPE

ALTER TYPE

更改一个数据类型的定义。

语法

``` sql ALTER TYPE name action [, … ] ALTER TYPE name OWNER TO new_owner 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 } existing_enum_value ] ALTER TYPE name SET DEFAULT ENCODING ( storage_directive )

其中 action是下列选项之一:

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 ]

其中 `storage_directive`是:

``` sql
   COMPRESSTYPE={ZLIB | ZSTD | QUICKLZ | RLE_TYPE | NONE}
   COMPRESSLEVEL={0-19}
   BLOCKSIZE={8192-2097152}

描述

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

ADD ATTRIBUTE
使用与CREATE TYPE相同的语法向复合类型添加新属性。
DROP ATTRIBUTE [ IF EXISTS ]
从复合类型中删除属性。 如果指定了IF EXISTS且该属性不存在,则不会引发任何错误。 在这种情况下,将发出通知。
SET DATA TYPE
更改复合类型的属性的类型。
OWNER
更改类型的所有者。
RENAME
更改类型的名称或复合类型的单个属性的名称。
SET SCHEMA
将类型移动到另一个架构。
ADD VALUE [ IF NOT EXISTS ] [ BEFORE | AFTER ]

将新值添加到枚举类型。 可以将新值在枚举顺序中的位置指定为现有值之一BEFOREAFTER。 否则,新项目将添加到值列表的末尾。

如果指定了IF NOT EXISTS,则该类型已经包含新值就不是错误; 发出通知,但不采取其他措施。 否则,如果新值已经存在,将发生错误。

CASCADE
自动将操作传播到要更改的类型的类型表及其后代。
RESTRICT
如果要更改的类型是类型表的类型,则拒绝该操作。 这是默认值。

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

可以更改名称,所有者和类型的架构。 您还可以添加或更新标量类型的存储选项。

注意: 不支持为行或复合类型添加存储选项。

必须拥有该类型才能使用ALTER TYPE。 要更改类型的架构,您还必须对新架构具有CREATE权限。更改所有者,您还必须是新拥有角色的直接或间接成员,并且该角色必须对类型的架构具有CREATE权限。

要添加属性或更改属性类型,还必须具有USAGE数据类型的权限。

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

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

参数

该SQL命令参数说明见下

name
要更改的现有类型的名称(可选的模式限定)。
new_name
类型的新名称。
new_owner
该类型的新所有者的用户名。
new_schema
类型的新架构。
attribute_name
要添加,更改或删除的属性的名称。
new_attribute_name
要重命名的属性的新名称。
data_type
要添加的属性的数据类型,或要更改的属性的新类型。
new_enum_value
要添加的属性的数据类型,或要更改的属性的新类型。
existing_enum_value
应该在枚举类型的排序顺序之前或之后立即添加新值的现有枚举值。 像所有枚举文字一样,也需要用引号引起来。
storage_directive

在表列定义中指定时,标识该类型的默认存储选项。

选项包括COMPRESSTYPECOMPRESSLEVELBLOCKSIZE

COMPRESSTYPE
设置为AUTOZSTDRLEQUICKLZ等以指定使用的压缩类型。
COMPRESSLEVEL
对于Zstd压缩,将其设置为1(最快压缩)到19(最高压缩率)之间的整数值。 对于RLE,压缩级别可以设置为从1(最快压缩)到4(最高压缩率)的整数值。缺省压缩级别为1。
BLOCKSIZE
设置为列中每个块的大小(以字节为单位)。 BLOCKSIZE必须介于8192和2097152字节之间,并且是8192的倍数。默认块大小为32768。

注意: 在表或列级别定义的storage_directives会覆盖为类型定义的默认存储选项。

示例

要重命名名为electronic_mail的数据类型:

ALTER TYPE electronic_mail RENAME TO email;

更改用户自定义类型email的所有者为joe

ALTER TYPE email OWNER TO joe;

更改用户自定义类型email的模式为customers

ALTER TYPE email SET SCHEMA customers;

设置或更改名为int33的用户定义类型的压缩类型和压缩级别:

ALTER TYPE int33 SET DEFAULT ENCODING (compresstype=zlib, compresslevel=7);

要将新属性添加到类型:

ALTER TYPE compfoo ADD ATTRIBUTE f3 int;

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

ALTER TYPE colors ADD VALUE 'orange' AFTER 'red';
兼容性说明
添加和删除属性的变体是SQL标准的一部分。 其他变体是SeaboxMPP数据库扩展。
相关SQL命令
CREATE TYPE, DROP TYPE