规则和命令状态

PostgreSQL 9.4.4 中文手册
上一页 | 上一级 | 章 38. 规则系统 | 下一页

# 38.6. 规则和命令状态

PostgreSQL服务器为它收到的每个命令返回一个命令状态字符串， 比如`INSERT 149592 1`。如果没有涉及规则，那么这些就很简单， 但是如果查询是被规则重写的又会怎样呢?

规则对命令状态的影响如下：

- 如果查询不存在无条件的`INSTEAD`规则，那么最初给出的查询将会被执行， 并且它的命令状态将像平常一样返回。但是请注意如果存在任何条件`INSTEAD`规则， 那么他们的条件的反条件将会已经加到最初的查询里了。这样可能会减少它处理的行数， 如果这样的话，报告状态将受影响。

- 如果查询有任何无条件的`INSTEAD`规则，那么最初的查询将完全不会被执行。 在这种情况下，服务器将返回由`INSTEAD`规则(条件的或非条件的) 插入的最后一条和源查询同命令类型(`INSERT`, `UPDATE`, 或 `DELETE`)查询的命令状态。如果规则添加的查询都不符合这些要求， 那么返回的命令状态显示源查询类型而行计数和 OID 字段为零。

（这个系统是在PostgreSQL 7.3建立的。在之前的版本里， 命令状态可能在规则退出时显示不同的结果。）

程序员可以用下面的方法确保任何需要的`INSTEAD`规则都是在上面第二种情况里设置命令状态的规则： 给这个规则命名为字母顺序最后一个活动的规则，这样它就最后附加。

上一页 | 起始页 | 下一页
规则和权限 | 上一级 | 规则与触发器的比较