问题报告 纠错本页面

ALTER DOMAIN

名称

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

大纲

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