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一样的语法向域中增加一种新的约束。 这样做只有在所有使用域的字段满足新约束的条件下才能成功。
这种形式删除一个域上的约束。
这种形式把域的所有者改变为另外一个用户。
这个形式改变域的模式。任何与该域相关的约束都移动到新的模式里。
You must own the domain to use ALTER DOMAIN. To change the schema of a domain, you must also have CREATE privilege on the new schema. To alter the owner, you must also be a direct or indirect member of the new owning role, and that role must have CREATE privilege on the domain's schema. (These restrictions enforce that altering the owner doesn't do anything you couldn't do by dropping and recreating the domain. However, a superuser can alter ownership of any domain anyway.)
要使用ALTER DOMAIN,您必须拥有该域。要修改一个域的模式, 您还必须在新模式上拥有CREATE权限。要修改所有者, 您还必须是新的所有角色的直接或间接成员,并且该成员必须在此域的模式上有CREATE权限。 这些限制强制了修改该所有者不会做任何通过删除和重建域不能做的事情。不过,超级用户可以以任何方式修改任意域的所有权。
一个要修改的现有域的名字(可以有模式修饰)。
域的新域约束
要删除的旧有约束
级联删除依赖这个对象的约束
如果有任何依赖对象,则拒绝删除约束。这是缺省行为。
域的新所有者的用户名
域的新模式
目前,如果命名的域或者任何派生的域用于数据库所有表的一个复合列中,那么 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 SET SCHEMA customers;