PostgreSQL 服务器为它收到的每个查询 返回一个命令状态字串,比如 INSERT 149592 1。如果没有 涉及规则,那么这些就很简单,但是如果查询是被规则重写的又会怎样呢?
对于 PostgreSQL 7.3,规则对命令状态 的影响如下:
如果查询不存在无条件的 INSTEAD 规则,那么最初给出的查询将会被 执行,并且它的命令状态将像平常一样返回。(但是请注意如果存在 任何条件 INSTEAD 规则,那么他们的条件的反条件将会已经加到最初 的查询里了。这样可能会减少它处理的行数,如果这样的话,报告状态 将受影响。)
如果查询有任何无条件的 INSTEAD 规则,那么最初的查询将完全不会被 执行。在这种情况下,服务器将返回由 INSTEAD 规则(条件的或非条件的)插入的最后一条 和源查询同类型的(INSERT,UPDATE,或者 DELETE)查询的命令状态。 如果规则添加的查询都不符合这些要求,那么返回的命令状态显示源 查询类型而元组计数和 OID 字段为零。
程序员可以用下面的方法确保任何需要的 INSTEAD 规则都是在上面第二种情况 里设置命令状态的规则,就是给这个规则命名为字母顺序最后一个活动的规则, 这样它就最后调用。