9.3 9.4 9.5 9.6 10 11 12
阿里云PostgreSQL 问题报告 纠错本页面

ALTER DOMAIN

ALTER DOMAIN — 更改一个域的定义

大纲

ALTER DOMAIN name
    { SET DEFAULT expression | DROP DEFAULT }
ALTER DOMAIN name
    { SET | DROP } NOT NULL
ALTER DOMAIN name
    ADD domain_constraint [ NOT VALID ]
ALTER DOMAIN name
    DROP CONSTRAINT [ IF EXISTS ] constraint_name [ RESTRICT | CASCADE ]
ALTER DOMAIN name
     RENAME CONSTRAINT constraint_name TO new_constraint_name
ALTER DOMAIN name
    VALIDATE CONSTRAINT constraint_name
ALTER DOMAIN name
    OWNER TO { new_owner | CURRENT_USER | SESSION_USER }
ALTER DOMAIN name
    RENAME TO new_name
ALTER DOMAIN name
    SET SCHEMA new_schema

描述

ALTER DOMAIN更改一个现有域的定义。有几种形式:

SET/DROP DEFAULT

这些形式设置或者移除一个域的默认值。注意默认值只会应用到后续的 INSERT命令,它们不影响使用该域的已经 存在于表中的行。

SET/DROP NOT NULL

这些形式更改一个域是被标记为允许 NULL 值还是拒绝 NULL 值。只有当使用该 域的列不包含空值时才能SET NOT NULL

ADD domain_constraint [ NOT VALID ]

这种形式使用和CREATE DOMAIN相同的语法为一个 域增加一个新的约束。当一个新的约束被增加到一个域时,所有使用该域的列 都会被根据新加的约束进行检查。可以通过增加使用 NOT VALID选项的新约束来抑制这类检查,而该约束则可 以在以后使用 ALTER DOMAIN ... VALIDATE CONSTRAINT 变为可用。新插入和更新的行总是会被根据所有约束进行检查(包括被标记为 NOT VALID的约束)。只有CHECK约束接受 NOT VALID

DROP CONSTRAINT [ IF EXISTS ]

这种形式删除一个域上的约束。如果指定了IF EXISTS并且 约束不存在,不会抛出错误。在这种情况下会转而发出一个提示。

RENAME CONSTRAINT

这种形式更改一个域上的一个约束的名称。

VALIDATE CONSTRAINT

这种形式验证一个之前作为NOT VALID增加的约束,也就是说 验证使用该域的列中所有数据满足指定的约束。

OWNER

这种形式更改域的拥有者为指定用户。

RENAME

这种形式更改域的名称。

SET SCHEMA

这种形式更改域的模式。任何与该域关联的约束也被会移动到新的模式中。

要使用ALTER DOMAIN,你必须拥有该域。要更改一个域的模式, 你还必须具有新模式上的CREATE特权。要更改拥有者,你还必须 是新拥有角色的一个直接或者间接成员,并且该角色必须具有该域的模式上的 CREATE特权(这些限制强制修改拥有者不能做一些通过删除和重 建域做不到的事情。不过,一个超级用户怎么都能更改任何域的所有权。)。

参数

name

要修改的一个现有域的名称(可能是模式限定的)。

domain_constraint

用于该域的新域约束。

constraint_name

要删除或重命名的一个现有约束的名称。

NOT VALID

不为约束的合法性验证现有的列数据。

CASCADE

自动删除依赖于该约束的对象,并且接着删除依赖于那些对象的 所有对象(见第 5.13 节)。

RESTRICT

如果有任何依赖对象则拒绝删除该约束。这是默认行为。

new_name

域的新名称。

new_constraint_name

约束的新名称。

new_owner

域的新拥有者的用户名。

new_schema

域的新模式。

注解

当前,如果经过验证的所提及的域或者任何衍生域被数据库中的任意表的一个组合类型 列使用,ALTER DOMAIN ADD CONSTRAINTALTER DOMAIN VALIDATE 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 RENAME CONSTRAINT zipchk TO zip_check;

要把域移动到一个不同的模式:

ALTER DOMAIN zipcode SET SCHEMA customers;

兼容性

ALTER DOMAIN conforms to the SQL standard, except for the 除OWNERRENAMESET SCHEMA 以及VALIDATE CONSTRAINT变体之外(它们是 PostgreSQL的扩展), ALTER DOMAIN符合SQL标准。 ADD CONSTRAINT变体的NOT VALID子句也是一个 PostgreSQL扩展。

另见

CREATE DOMAIN, DROP DOMAIN