ALTER DOMAIN
ALTER DOMAIN — 更改一个域的定义
大纲
ALTER DOMAINname{ SET DEFAULTexpression| DROP DEFAULT } ALTER DOMAINname{ SET | DROP } NOT NULL ALTER DOMAINnameADDdomain_constraintALTER DOMAINnameDROP CONSTRAINTconstraint_name[ RESTRICT | CASCADE ] ALTER DOMAINnameOWNER TOnew_ownerALTER DOMAINnameSET SCHEMAnew_schema
描述
ALTER DOMAIN更改一个现有域的定义。有以下几种子形式:
- SET/DROP DEFAULT
这些形式为域设置或移除默认值。注意,默认值只适用于后续的
INSERT命令;它们不会影响已存在于使用该域的表中的行。- SET/DROP NOT NULL
这些形式更改域是被标记为允许 NULL 值还是拒绝 NULL 值。只有当使用该域的列中不包含空值时,才能执行
SET NOT NULL。- ADD
domain_constraint 这种形式使用与CREATE DOMAIN相同的语法向域添加一个新约束。只有当所有使用该域的列都满足新约束时,这一操作才会成功。
- DROP CONSTRAINT
这种形式删除域上的约束。
- OWNER
这种形式将域的拥有者更改为指定用户。
- SET SCHEMA
这种形式更改域所在的模式。与该域关联的任何约束也会一并移动到新模式中。
要使用ALTER DOMAIN,必须拥有该域。要更改域的模式,还必须在新模式上拥有CREATE权限。要更改所有者,还必须是新所有者角色的直接或间接成员,并且该角色必须在域所在模式上拥有CREATE权限。(这些限制确保更改所有者不会执行任何无法通过删除并重新创建域完成的操作。不过,超级用户无论如何都可以更改任何域的所有权。)
参数
name要修改的现有域的名称(可以是模式限定的)。
domain_constraint该域的新约束。
constraint_name要删除的现有约束的名称。
CASCADE自动删除依赖于该约束的对象。
RESTRICT如果存在任何依赖对象,则拒绝删除该约束。这是默认行为。
new_owner域的新拥有者的用户名。
new_schema域的新模式。
示例
向域添加一个NOT NULL约束:
ALTER DOMAIN zipcode SET NOT NULL;
从域中移除一个NOT NULL约束:
ALTER DOMAIN zipcode DROP NOT NULL;
向域添加一个检查约束:
ALTER DOMAIN zipcode ADD CONSTRAINT zipchk CHECK (char_length(VALUE) = 5);
从域中移除一个检查约束:
ALTER DOMAIN zipcode DROP CONSTRAINT zipchk;
将域移动到另一个模式中:
ALTER DOMAIN zipcode SET SCHEMA customers;
兼容性
ALTER DOMAIN 符合 SQL 标准,但 OWNER 和 SET SCHEMA 变体是 PostgreSQL 扩展。