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 的约束。 NOT VALID 仅适用于 CHECK 约束。
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
自动删除依赖于约束的对象,以及依赖于这些对象的所有对象。
RESTRICT
如果存在任何依赖对象,则拒绝删除约束。这是默认行为。
new_name
域的新名称。
new_constraint_name
约束的新名称。
new_owner
域的新所有者的用户名。
new_schema
域的新架构。
注意事项
目前,如果在数据库的任何表中的容器类型列(复合,数组或范围列)中使用命名域或任何派生域,则ALTER DOMAIN ADD CONSTRAINT , ALTER DOMAIN VALIDATE 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 RENAME CONSTRAINT zipchk TO zip_check;
要将域移动到其他架构:
ALTER DOMAIN zipcode SET SCHEMA customers;