400-800-0824
info@ymatrix.cn
400-800-0824
info@ymatrix.cn
400-800-0824
info@ymatrix.cn
400-800-0824
info@ymatrix.cn
400-800-0824
info@ymatrix.cn
YMatrix 文档
关于 YMatrix
标准集群部署
数据写入
数据迁移
数据查询
运维监控
参考指南
工具指南
数据类型
存储引擎
执行引擎
流计算引擎
灾难恢复
系统配置参数
索引
扩展
SQL 参考
常见问题(FAQ)
定义新的重写规则。
CREATE [OR REPLACE] RULE name AS ON event
TO table_name [WHERE condition]
DO [ALSO | INSTEAD] { NOTHING | command | (command; command
...) }
CREATE RULE定义了应用于指定表或视图的新规则。 CREATE OR REPLACE RULE将创建一个新规则,或为同一表替换一个具有相同名称的现有规则。
YMatrix 数据库规则系统允许您定义对数据库表中的插入,更新或删除执行的另一种操作。 当执行给定表上的给定命令时,规则将导致执行附加或替代命令。 INSTEAD规则可以用另一个命令替换给定命令,或导致根本不执行命令。 规则也可以用于实现SQL视图。 重要的是要认识到规则实际上是命令转换机制或命令宏。 转换发生在命令执行开始之前。 它不会像触发器那样针对每个物理行独立运行。
ON SELECT规则必须是无条件的INSTEAD规则,并且必须具有由单个SELECT命令组成的操作。 因此,ON SELECT规则有效地将表变成视图, 其可见内容是规则的SELECT命令返回的行,而不是表中存储的内容(如果有的话)。 与创建真实表并为其定义ON SELECT规则相比, 写CREATE VIEW命令被认为是更好的样式。
您可以通过定义ON INSERT, ON UPDATE和ON DELETE规则将视图上的更新操作替换为其他表上的适当更新, 来创建可更新视图的错觉。 如果要支持INSERT RETURNING等,请确保在每个规则中放入合适的RETURNING子句。
如果尝试使用条件规则进行视图更新,则有一个陷阱: 要允许在视图上执行的每个操作都必须有一个无条件的INSTEAD规则。 如果规则是有条件的,或者不是INSTEAD,则系统仍将拒绝执行更新操作的尝试, 因为它认为在某些情况下可能最终尝试对视图的虚拟表执行操作。 如果要处理条件规则中的所有有用情况,请添加无条件的DO INSTEAD NOTHING规则, 以确保系统理解它将永远不会被调用它来更新虚拟表。 然后将条件规则设为non-INSTEAD; 在应用它们的情况下,它们会添加到默认的INSTEAD NOTHING操作中。 (但是,该方法当前不适用于支持RETURNING查询。)
name
event
table_name
condition
INSTEAD
ALSO
command
您必须是表的所有者才能创建或更改该表的规则。
注意避免循环规则非常重要。递归规则在规则创建时未得到验证,但是将在执行时报告错误。
创建一个规则,当用户尝试向分区的父表rank中插入行时,将行插入到子表b2001中:
CREATE RULE b2001 AS ON INSERT TO rank WHERE gender='M' and
year='2001' DO INSTEAD INSERT INTO b2001 VALUES (NEW.id,
NEW.rank, NEW.year, NEW.gender, NEW.count);
CREATE RULE是 YMatrix 数据库语言的扩展,整个查询重写系统也是如此。