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标准兼容。