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 CONSTRAINT
和ALTER 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;
兼容性
除了OWNER
、RENAME
、SET SCHEMA
和VALIDATE CONSTRAINT
这些选项是PostgreSQL扩展外, ALTER DOMAIN
语句基本与SQL标准兼容。 ADD CONSTRAINT
相关的NOT VALID
选项也是PostgreSQL的扩展。