ALTER DOMAIN

From PostgreSQL wiki
Jump to navigationJump to search
名字

ALTER DOMAIN -- 修改一个域的定义

语法概要
   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值。在使用域的字段包含非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
域的新模式
注意

目前,如果命名的域或者任何派生的域用于数据库所有表的一个复合列中,那么 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;
兼容性

除OWNER和SET SCHEMA变种是PostgreSQL扩展之外, ALTER DOMAIN语句与SQL标准兼容。

参见

CREATE DOMAIN, DROP DOMAIN