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 值。在使用域的字段包含非 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;