ALTER DOMAIN

From PostgreSQL wiki

Revision as of 12:17, 12 June 2013 by Gvim (Talk | contribs)

(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search

Contents

名字

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 这个形式改变域的模式。任何与该域相关的约束都移动到新的模式里。

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 域的新模式

注意

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

Personal tools