ALTER DOMAIN

ALTER DOMAIN-更改域的定义

Synopsis

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

Description

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

您必须拥有域才能使用ALTER DOMAIN。要更改域的架构,您还必须对新架构具有CREATE特权。要更改所有者,您还必须是新拥有角色的直接或间接成员,并且该角色必须对域的架构具有CREATE特权。 (这些限制规定,更改所有者不能通过删除并重新创建域来完成您无法做的任何事情.但是,超级用户仍然可以更改任何域的所有权.)

Parameters

Notes

尽管ALTER DOMAIN ADD CONSTRAINT试图验证现有存储的数据是否满足新的约束,但是此检查不是防弹的,因为该命令无法“看到”新插入或更新且尚未提交的表行。如果存在并发操作可能会插入错误数据的危险,则 continue 的方法是使用NOT VALID选项添加约束,提交该命令,await 所有事务开始,直到该提交完成,然后发出ALTER DOMAIN VALIDATE CONSTRAINT来搜索数据违反约束。此方法之所以可靠,是因为一旦提交了约束,就可以保证所有新事务都针对域类型的新值强制实施该约束。

当前,如果在数据库的任何表的容器类型列(复合列,数组或范围列)中使用了命名域或任何派生域,则ALTER DOMAIN ADD CONSTRAINTALTER DOMAIN VALIDATE CONSTRAINTALTER DOMAIN SET NOT NULL将失败。最终应该对其进行改进,以能够验证此类嵌套值的新约束。

Examples

要将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;

Compatibility

ALTER DOMAIN符合 SQL 标准,但OWNERRENAMESET SCHEMAVALIDATE CONSTRAINT变体是 PostgreSQL 扩展。 ADD CONSTRAINT变体的NOT VALID子句也是 PostgreSQL 扩展。

See Also

CREATE DOMAIN, DROP DOMAIN

上一章 首页 下一章