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 修改一个现有域的定义。 它有几种子形式:
这些形式设置或者删除一个域的缺省值。请注意缺省只适用于随后的 INSERT 命令;他们并不影响使用该域已经在表中的行。
这些形式改变一个域是否标记为允许 NULL 值或者是拒绝 NULL 值。 在使用域的字段包含非空的值的时候,你只可以 SET NOT NULL。
这种形式向域中增加一种新的约束,使用的语法和 CREATE DOMAIN 一样。这样做只有在所有使用域的字段满足新的约束的条件下才能成功。
这种形式删除一个域上的约束。
这种形式把域的所有者改变为另外一个用户。
这个形式改变域的模式。任何与该域相关的约束都移动到新的模式里。
要使用 ALTER DOMAIN,你必须拥有该域。 要修改一个域的模式,你还必须在新模式上拥有 CREATE 权限。 要修改所有者,你必须还是新的所有角色的直接或者间接的成员, 并且该成员必须在此域的模式上有 CREATE 权限。 (这些限制保证了修改所有者和删除、重建域的动作没啥区别。 不过,超级用户可以用任何方法修改域的所有者。)
一个要修改的现有域的名字(可以有模式修饰)。
域的新的域约束。
要删除的现有约束。
自动删除依赖这个对象的约束。
如果有任何依赖对象,则拒绝删除约束。这是缺省行为。
域的新所有者的用户名。
域的新模式。
给一个域增加一个 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;