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
ALTER DOMAIN name
    DROP CONSTRAINT constraint_name [ RESTRICT | CASCADE ]
ALTER DOMAIN name
    OWNER TO new_owner
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

这种形式向域中增加一种新的约束,使用的语法和 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 变种之外,这个变种是 PostgreSQL 的扩展。

又见

CREATE DOMAIN, DROP DOMAIN