ALTER DOMAIN

Name

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

Synopsis

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 

Description

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

这个形式改变域的模式。任何与该域相关的约束都移动到新的模式里。

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权限。 这些限制强制了修改该所有者不会做任何通过删除和重建域不能做的事情。不过,超级用户可以以任何方式修改任意域的所有权。

参数

name

一个要修改的现有域的名字(可以有模式修饰)。

domain_constraint

域的新域约束

constraint_name

要删除的旧有约束

CASCADE

级联删除依赖这个对象的约束

RESTRICT

如果有任何依赖对象,则拒绝删除约束。这是缺省行为。

new_owner

域的新所有者的用户名

new_schema

域的新模式

Notes

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

兼容性

OWNERSET SCHEMA变种(PostgreSQL的扩展)之外, ALTER DOMAIN语句与SQL标准兼容。

又见

CREATE DOMAIN, DROP DOMAIN