ALTER DOMAIN

Name

ALTER DOMAIN -- 修改一个域的定义

Synopsis

ALTER DOMAIN _name_
{ SET DEFAULT _expression_ | DROP DEFAULT }
ALTER DOMAIN _name_
{ SET | DROP } NOT NULL
ALTER DOMAIN _name_
ADD _domain_constraint_ [ NOT VALID ]
ALTER DOMAIN _name_
DROP CONSTRAINT [ IF EXISTS ] _constraint_name_ [ RESTRICT | CASCADE ]
ALTER DOMAIN _name_
RENAME CONSTRAINT _constraint_name_ TO _new_constraint_name_
ALTER DOMAIN _name_
VALIDATE CONSTRAINT _constraint_name_
ALTER DOMAIN _name_
OWNER TO _new_owner_
ALTER DOMAIN _name_
RENAME TO _new_name_
ALTER DOMAIN _name_
SET SCHEMA _new_schema_

描述

ALTER DOMAIN 修改一个域的定义。它有几种子形式:

SET/DROP DEFAULT

这些形式设置或者删除一个域的缺省值。请注意缺省值只适用于随后的 INSERT 命令;他们并不影响使用该域已经在表中的行。

SET/DROP NOT NULL

这些形式改变一个域是否标记为允许 NULL 值或者是不允许 NULL 值。 在使用域的字段包含非空的值的时候,你只可以使用 SET NOT NULL

ADD _domain_constraint_ [ NOT VALID ]

这种形式向域中增加一种新的约束,使用的语法和 CREATE DOMAIN 一样。 当一个新的约束增加至域中时,使用这个域的所有列将会按新增的约束条件进行检查。 这些检查也可以通过使用NOT VALID选项来增加新的约束条件进行关闭; 约束也可以以后通过ALTER DOMAIN ... VALIDATE CONSTRAINT语句生效。 新插入或是更新的记录将会按所有约束进行检查,甚至是标记为NOT VALID的约束。 NOT VALID只是对CHECK约束生效。

DROP CONSTRAINT [ IF EXISTS ]

这种形式删除一个域上的约束。如果使用了IF EXISTS 选项并且约束并不存在时,系统不会抛出错误提示, 这种情况下系统只会发出一个提示信息。

RENAME CONSTRAINT

这种形式更改一个域上的约束名称。

VALIDATE CONSTRAINT

这种形式将域上以前以NOT VALID选项增加的约束进行生效,这样会对域中所有列的数据按这个指定的约束进行验证。

OWNER

这种形式将域的所有者改变为一个指定的用户。

RENAME

这种形式将改变域的名称。

SET SCHEMA

这种形式将改变域的模式。所有与这个域有关的约束也会移至新的模式。

要使用ALTER DOMAIN语句,您必须是该域的所有者。 要修改一个域的模式, 您还必须在新模式上拥有CREATE权限。 要修改所有者, 您还必须是新的所有角色的直接或间接成员,并且该成员必须在此域的模式上有CREATE权限。 (这些限制强制了修改该所有者不会做任何通过删除和重建域不能做的事情。不过,超级用户可以以任何方式修改任意域的所有关系。)

参数

_name_

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

_domain_constraint_

域的新域约束。

_constraint_name_

要删除或是重命名的原有约束名。

_NOT VALID_

不对已有数据进行约束的有效性验证。

CASCADE

自动级联删除依赖这个约束的对象。

RESTRICT

如果有任何依赖对象,则拒绝删除约束。这是缺省行为。

_new_name_

域的新名称。

_new_constraint_name_

约束的新名称。

_new_owner_

域的新的所有者的用户名。

_new_schema_

域的新的模式名。

注意

目前,如果命名的域或者任何派生的域用于数据库中任何一个表的一个复合列中, 那么 ALTER DOMAIN ADD CONSTRAINTALTER DOMAIN SET NOT NULL 将失败。 最终,他们应该加以改进以达到能够验证这种嵌套列的新约束。

例子

给一个域增加一个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 RENAME CONSTRAINT zipchk TO zip_check;

把域移动到另外一个模式:

ALTER DOMAIN zipcode SET SCHEMA customers;

兼容性

除了OWNERRENAMESET SCHEMAVALIDATE CONSTRAINT这些选项是PostgreSQL扩展外, ALTER DOMAIN语句基本与SQL标准兼容。 ADD CONSTRAINT相关的NOT VALID选项也是PostgreSQL的扩展。

参见

CREATE DOMAIN, DROP DOMAIN