ALTER DOMAIN — 更改域的定义
ALTER DOMAINname{ SET DEFAULTexpression| DROP DEFAULT } ALTER DOMAINname{ SET | DROP } NOT NULL ALTER DOMAINnameADDdomain_constraint[ NOT VALID ] ALTER DOMAINnameDROP CONSTRAINT [ IF EXISTS ]constraint_name[ RESTRICT | CASCADE ] ALTER DOMAINnameRENAME CONSTRAINTconstraint_nameTOnew_constraint_nameALTER DOMAINnameVALIDATE CONSTRAINTconstraint_nameALTER DOMAINnameOWNER TO {new_owner| CURRENT_ROLE | CURRENT_USER | SESSION_USER } ALTER DOMAINnameRENAME TOnew_nameALTER DOMAINnameSET SCHEMAnew_schemawheredomain_constraintis: [ CONSTRAINTconstraint_name] { NOT NULL | CHECK (expression) }
ALTER DOMAIN 更改现有域的定义。有几种子形式。
SET/DROP DEFAULT这些形式设置或删除域的默认值。请注意,默认值仅适用于后续的 INSERT 命令;它们不会影响使用该域的表中的现有行。
SET/DROP NOT NULL这些形式更改域是否标记为允许 NULL 值或拒绝 NULL 值。当使用该域的列不包含 null 值时,您只能 SET NOT NULL。
ADD domain_constraint [ NOT VALID ]此形式向域添加新约束。当向域添加新约束时,使用该域的所有列都将针对新添加的约束进行检查。通过添加带有 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 权限。要更改所有者,您必须能够 SET ROLE 为新拥有角色,并且该角色必须对域的模式拥有 CREATE 权限。(这些限制确保更改所有者不会做任何您通过删除和重新创建域而无法做到的事情。但是,超级用户可以更改任何域的所有权。)
name要更改的现有域的名称(可能已模式限定)。
domain_constraint域的新域约束。
constraint_name要删除或重命名的现有约束的名称。
NOT VALID不要验证现有存储数据是否符合约束的有效性。
CASCADE自动删除依赖于约束的对象,以及反过来依赖于这些对象的所有对象(请参阅 第 5.15 节)。
RESTRICT如果存在任何依赖对象,则拒绝删除约束。这是默认行为。
new_name域的新名称。
new_constraint_name约束的新名称。
new_owner域的新所有者的用户名。
new_schema域的新模式。
虽然 ALTER DOMAIN ADD CONSTRAINT 尝试验证现有存储数据是否满足新约束,但此检查并非万无一失,因为该命令无法 “看到” 新插入或更新但尚未提交的表行。如果存在并发操作可能插入坏数据的风险,则应采取的方法是使用 NOT VALID 选项添加约束,提交该命令,等待在它提交之前开始的所有事务都完成,然后发出 ALTER DOMAIN VALIDATE CONSTRAINT 来搜索违反约束的数据。此方法是可靠的,因为一旦约束被提交,所有新事务都保证会针对域类型的新值强制执行它。
当前,如果数据库中的任何表中的容器类型列(复合、数组或范围列)使用了命名的域或任何派生域,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;
重命name域上的检查约束
ALTER DOMAIN zipcode RENAME CONSTRAINT zipchk TO zip_check;
将域移动到不同的模式
ALTER DOMAIN zipcode SET SCHEMA customers;
ALTER DOMAIN 符合SQL标准,除了 OWNER、RENAME、SET SCHEMA 和 VALIDATE CONSTRAINT 变体,这些是 PostgreSQL 扩展。 ADD CONSTRAINT 变体的 NOT VALID 子句也是 PostgreSQL 扩展。
如果您在文档中看到任何不正确、与您对特定功能的体验不符或需要进一步澄清的内容,请使用 此表单 报告文档问题。