选择 打开 改范围 完整检索页

pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。

受支持版本: 当前版本 (18) / 17 / 16 / 15 / 14
测试与开发版本: 19 / devel
不受支持的版本: 13 / 12 / 11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2 / 9.1 / 9.0
历史版本PostgreSQL 9.1 已于 2016 年 10 月结束社区维护,本页译文保留供仍在使用旧版本的读者参考。新系统请看当前版本

ALTER DOMAIN

ALTER DOMAIN — change the definition of a 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 值。只有当使用该域的列中 不包含空值时,才能执行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 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;

兼容性

ALTER DOMAIN 符合 SQL 标准,但 OWNERSET SCHEMA 变体是 PostgreSQL 扩展。

提交更正

译文有误、术语不当或页面显示问题,请到译文仓库 pgsty/pgdoc 报告译文问题。 英文原文本身的问题,请在当前版本的对应页面向上游反馈;上游不再修订已结束维护的版本。