关于 YMatrix
标准集群部署
数据写入
数据迁移
数据查询
运维监控
参考指南
工具指南
数据类型
存储引擎
执行引擎
流计算引擎
灾难恢复
系统配置参数
索引
扩展
SQL 参考
常见问题(FAQ)
更改现有域的定义。
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 用于修改现有域的定义。包含以下子形式:
使用 ALTER DOMAIN 语句必须拥有该域。若要更改域的模式,还需对新模式拥有CREATE权限。若要更改所有者,必须是新所有者角色的直接或间接成员,且该角色需对域的模式拥有CREATE权限。(这些限制确保更改所有者操作不会执行任何无法通过删除并重建域实现的操作。但超级用户仍可更改任何域的所有权。)
尽管 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;
在一个域中从命名一个约束
ALTER DOMAIN zipcode RENAME CONSTRAINT zipchk TO zip_check;
将域移动到不同的模式:
ALTER DOMAIN zipcode SET SCHEMA customers;
ALTER DOMAIN 符合 SQL 标准,除了 OWNER, RENAME, SET SCHEMA, 和 VALIDATE CONSTRAINT 变形,这些是 YMatrix 的扩展功能。 ADD CONSTRAINT 中的 NOT VALID 变形也是 YMatrix 的扩展功能。